Как взаимодействовать между бизнес-логикой и шаблоном? - PullRequest
2 голосов
/ 25 марта 2012

У меня следующая проблема.

У меня есть страница, которая:

  1. читает сеанс из базы данных и все содержимое базы данных.
  2. «Примените» логику.
  3. и, наконец, презентацию, которая представляет собой файл шаблона (.tpl)

И это работает.Файл шаблона представляет собой сеть с сеткой и формой, в которой я могу CRUDL базу данных, поэтому она может варьироваться в зависимости от пользователя, который обращается к ней.Например, , если текущий пользователь является администратором, тогда он должен отобразить все опции, а если пользователь с ограниченными правами, то он должен скрыть некоторые поля .

Однако я не знаюкак действовать дальше.Как лучше взаимодействовать между бизнес-логикой и шаблоном?

a) Используйте шаблон с логикой ( Presentation Logic ).Например, если пользователи (которые имеют к нему доступ) имеют ограниченные права доступа, тогда логика удаляет кнопку «сохранить»:

 ...
 {if current_user!=limited}
  <input type='button' value='save' />
  ..
 {endif}
 ...
  • Преимущество заключается в том, что используется только один шаблон.
  • Минусы: добавьте логику к уровню представления.

b) Используйте различные файлы шаблонов и решите в бизнес-логике, какой шаблон загрузить.

 if ($current_user!="limited") {
    load_template("template_complete.tpl");
 } else {
    load_template("template_limited.tpl");
 }
  • "за" - это шаблон более понятный (без логики)
  • "против" - он многословен, он требует разных шаблонов.

или существует другое решение?.

Ответы [ 4 ]

4 голосов
/ 25 марта 2012

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

Как уже сказал Майкл Раштон: вы не хотите дублировать код, когда его можно избежать.

Шаблон Model-View-Controller о разделении логики на три уровня:

  • логика представления данных (модель)
  • бизнес-логика (контроллер)
  • логика представления (просмотр)

Это не о перемещении всей логики из представления в контроллер.

2 голосов
/ 25 марта 2012

Если шаблоны совершенно разные, я бы сказал, что второй пример.Но если различия между ограниченным и неограниченным пользователем заключаются в том, что несколько кнопок, ссылок, <div> s и т. Д. Появляются для одной, а не для другой, тогда я говорю, перейдите к первой.Вы не хотите слишком много дублировать свой код, так как это делает более громоздким создание обновлений или исправление ошибок.

Хотя вы хотите отделить логику от презентации настолько, насколько это возможно, вы можете принять это тожедалеко.В какой-то момент всегда будет некоторое совпадение.Если это не слишком сложно, нет ничего плохого в том, чтобы внутри условного оператора было <input>.

PHP был создан для использования в любом случае вместе с HTML.

0 голосов
/ 11 сентября 2013

Вместо того, чтобы рассматривать только этот пример, я бы посоветовал вам подумать о том, чего вы пытаетесь достичь, создать правило, а затем работать по правилу.

например. В приведенном выше примере вы пытаетесь помешать пользователю получить определенную информацию? или вы говорите, что у пользователя есть определенная роль, и система должна иметь определенные элементы управления, чтобы реагировать на определенные роли.

Это также отдача от усилий разработчиков теперь против усилий по обслуживанию позже. Может быть, попробуйте подумать о том, что вы будете делать в идеальном мире, и работать в обратном направлении. Может быть, вы можете создать конструктор для создания различных необходимых вам шаблонов и т. Д.

Я не думаю, что есть правильное или неправильное, просто альтернативы и различные выплаты

0 голосов
/ 25 марта 2012

О. Ответ прост.
Просто постарайтесь поддерживать эти разные шаблоны довольно долго, старательно повторяя все исправления.

И вы будете знать ответ.

Это программирование, чувак.
Программирование означает избегая повторений .

Подсказка: ваш второй подход все равно не может быть "логичным".
Всегда есть логика. Это называется «представление логика » по причине.

...