2013-09-22 5 views
2

Вот сценарий; В разделе администрирования веб-сайта у меня есть довольно много таблиц CRUD, которые должны отображаться при успешном выполнении/info/сообщения об ошибках, когда действие было выполнено, например, удаляемая запись. Я уверен, что все знакомы с этим.Рендеринг HTML внутри классов?

Это обычно включает в себя сообщения, обернутые в пределах <div class="alert alert-success">User updated</div> или что-то подобное.

В текущем приложении Laravel я создаю, у меня есть файл конфигурации:

<?php 

return array(

    'info' => array(

     'start' => '<div class="callout callout-info"><h3><i class="icon-info-sign-sign"></i> Information</h3>', 
     'opening' => '<i class="icon-caret-right"></i> ', 
     'closing' => '<br>', 
     'end'  => '</div>', 

    ), 

    'success' => array(

     'start' => '<div class="callout callout-success"><h3><i class="icon-ok-sign"></i> Success</h3>', 
     'opening' => '<i class="icon-caret-right"></i> ', 
     'closing' => '<br>', 
     'end'  => '</div>', 

    ), 

    'warning' => array(

     'start' => '<div class="callout callout-warning"><h3><i class="icon-warning-sign"></i> Warning</h3>', 
     'opening' => '<i class="icon-caret-right"></i> ', 
     'closing' => '<br>', 
     'end'  => '</div>', 

    ), 

    'error' => array(

     'start' => '<div class="callout callout-danger"><h3><i class="icon-remove-sign"></i> Warning</h3>', 
     'opening' => '<i class="icon-caret-right"></i> ', 
     'closing' => '<br>', 
     'end'  => '</div>', 

    ) 

); 

Какой класс форматера использует для визуализации объекта MessageBag (хранит массив, например ошибки проверки, такие как недействительный адрес электронной почты.) в читаемый HTML. Это не точно хранит HTML в классе Formatter, но делает его внутри.

Форматировщик класс просто делает объект MessageBag с опцией конфигурации так:

$formatter = new Formatter('success', $messageBag); 
$html = $formatter->render(); 

который затем передается от контроллера к просмотру и отображается.

return View::make('admin.template')->with('message', $html); 

Этот метод позволяет мне обновлять HTML-код и то, как он передается по всему разделу администрирования из одного класса. Таким образом, он согласуется с принципом DRY. Он уменьшает все циклы foreach по моим шаблонам.

Так что напрашивается вопрос ...

это лучше повторить себя в шаблонов представления, а не смешивать бизнес и презентационные слои? Или наоборот?

Мое личное мнение (в настоящее время) заключается в том, что использование файла конфигурации в сочетании с классом является хорошим решением. Я также считаю, что хранение HTML в классе - это плохая практика, поэтому файл конфигурации.

ответ

2

Это действительно вызов.

Большую часть времени я предпочитаю хранить HTML вне классов и файлов конфигурации. Вместо этого я помещаю как можно больше HTML в шаблоны. Шаблоны, разделяемые разными представлениями, могут храниться в общей папке и анализироваться механизмом шаблонов в правильном контексте.

Кстати, я делаю огромные исключения из этой концепции при написании небольших приложений и расширений. Хотя я думаю, что оба они важны, я полагаю, что я ценю прагматичное мышление за то, что он последователен.

Реальные вопросы: сколько времени потребуется, чтобы разделить все ваши разные типы данных и будет ли вознаграждение за это достаточно большим, чтобы оправдать время и усилия, которые вы вложили в него?

Смежные вопросы