Почему я должен использовать систему шаблонной обработки в PHP?

Независимо от того, что вы делаете в конечном итоге, убедитесь, что вы проверяете, что ваш вход еще не был искажен magic_quotes или каким-то другим благонамеренным мусором, и, если необходимо, запустите его через stripslashes или что-то еще, чтобы его дезинфицировать .

58
задан Josef Sábl 21 December 2016 в 14:48
поделиться

19 ответов

Да, как Вы сказали, если Вы не вынуждаете себя использовать механизм шаблонной обработки в PHP (механизм шаблонной обработки), становится легко подсунуть и прекратить разделять проблемы.

Однако , те же люди, у которых есть проблемы при разделении проблем, заканчивают тем, что генерировали HTML и подали его присяжному острослову или выполнили код PHP в Присяжном острослове, таким образом, едва решение Присяжного острослова разделительной проблемы беспокойства.

См. также:

26
ответ дан Community 24 November 2019 в 18:59
поделиться

Я держал бы пари, что, если язык шаблона PHP был так коэрцитивен, чтобы вынудить Вас использовать его, Вы не будете использовать его вообще. Способность 'выскочить' и сделать вещи Ваш путь, когда в проблеме один из attractives PHP.

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

Иначе, я соглашаюсь, что шаблонная обработка систем помогает Вам разделить работу между кодированием и дизайном и возможно разрешением разработчикам разработать и кодирование нам.

0
ответ дан Adriano Varoli Piazza 24 November 2019 в 18:59
поделиться

И давайте не забывать будущее. Веб-сайты стары почти минута, они публикуются. НЕОБХОДИМО будет обновить стиль в какой-то момент. Если Вы часто поддерживаете разделение времена, один только разработчик может завершить совершенно новый веб-сайт с тем же программированием на бэкэнде. Это допускает более быстрые и более дешевые модернизации, позволяя Вам только вовлечь программиста, если новая функциональность требуется.

1
ответ дан UberDragon 24 November 2019 в 18:59
поделиться

Когда Вы пишете код для кого-то еще. Например, я был когда-то вовлечен в создание твердой платформы веб-приложений, которая должна быть настраиваема для наших клиентов. Один важный запрос был то, что клиент мог нанять разработчика для изменения шаблонов без необходимость быть в состоянии программировать. Еще более важный, он не мог бы быть , разрешил изменять код.

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

1
ответ дан Konrad Rudolph 24 November 2019 в 18:59
поделиться
  • Вы хотите использовать файл с кодом PHP как шаблон? Прекрасный.
  • Вы хотите использовать свои переменные в упомянутом шаблоне? Прекрасный.

Просто не забывают разделять логический и окончательный результат (представление). Это лучше выполняется с платформой шаблонной обработки. Но Вы не должны изучать что-то как Присяжный острослов.

  • при использовании Zend_View или подобный можно использовать код PHP полностью.

у Многих людей здесь есть корректный ответ. Присяжный острослов не обрабатывает по шаблону в PHP. Отнюдь нет. Присяжный острослов там главным образом для тех, кто должен использовать разработчиков (т.е. непрограммисты), чтобы отредактировать и установить дисплей страниц. Если все, кто собирается изменять расположение Ваших страниц, могут программировать, можно пойти с большим количеством кода PHP, ориентированного, обработав систему по шаблону. Но Вы действительно должны иметь все свои готовые выходные данные и отправить его в шаблон. Если Вы позволяете каждой странице выбрать, обработать и отобразить содержание, необходимо будет осуществить рефакторинг его раньше тогда позже.

1
ответ дан OIS 24 November 2019 в 18:59
поделиться

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

И {$myvar|escape}, по моему скромному мнению, вполне немного короче, чем <?php echo htmlspecialchars($myvar); ?>. (Учет того факта, что <?=$foo?> синтаксис только доступен, когда он особенно включен на конференции PHP)

1
ответ дан Rene Saarsoo 24 November 2019 в 18:59
поделиться

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

1
ответ дан Zoredache 24 November 2019 в 18:59
поделиться

Ваш анализ разумен. Я предполагаю:

  • Шаблонные разработчики и программисты бэкенда не могут быть один в том же, таким образом, оно способствует разделению.
  • Это защищает Вас от себя несколько, в которых Вы не можете действительно сделать "слишком много" PHP в Ваших шаблонах.
  • может быть легче оптимизировать/предварительно компилировать шаблоны в некоторых сценариях? (Это - предположение)

Лично, я думаю, что они - больше стычки, чем они стоят. Особенно они не работают, если Вы хотите вручить шаблоны "разработчикам", так как инструменты WYSIWYG не знают, что сделать с ними.

1
ответ дан Draemon 24 November 2019 в 18:59
поделиться

Вы забыли htmlspecialchars() дважды. Вот почему Вам нужна система шаблонной обработки.

Присяжный острослов беден. Не судите системы шаблонной обработки на основе этого.

2
ответ дан Kornel 24 November 2019 в 18:59
поделиться

Я - счастливое использование платформы MVC как воспламенитель кода. Я нахожу, что в 'представлениях' я склонен придерживаться кода php, который имеет отношение только к тому, как отображены значения. У меня есть библиотека функций форматирования, которые я могу использовать в представлениях для того эффекта. Одно из помещения воспламенителя кода должно избежать языка шаблонной обработки из-за способа, которым это может ограничить Вас и замедление понесенного.

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

2
ответ дан roborourke 24 November 2019 в 18:59
поделиться

Мне нравится способность тривиально отобразить любой шаблон из любого файла PHP (и включать фрагменты шаблонов друг в друге для общих элементов как военно-морские панели). Например, предположите, что у Вас была страница, которая обычно печатает некоторую информацию, если Вы зарегистрированы или ошибка, если Вы не. С PHP Вы записали бы что-то как:

if (loggedIn)
{
    // print lots of HTML here
}
else
{
    // print error message
}

В Присяжном острослове, это могло быть что-то вроде этого (простите мой, вероятно, неправильный синтаксис, это было некоторое время):

if (loggedIn)
{
    $smarty->bind("info", someObject);
    $smarty->display("info.template");
}
else
    $smarty->display("error.template");

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

3
ответ дан rmeador 24 November 2019 в 18:59
поделиться

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

4
ответ дан Luca Matteis 24 November 2019 в 18:59
поделиться

PHP в значительной степени система шаблонной обработки. Ключ должен вынудить себя разделить логику от представления самостоятельно. Используя Присяжного острослова или что-то как этот только делает его немного более неудобным для смешивания логики и представления. Если Вы не можете заставить себя разделить их самостоятельно, использование системы шаблонной обработки не собирается помогать. Все, что это собирается сделать, съедают дополнительную вычислительную мощность.

ключ не должен изменять значения в Вашем коде представления. Чтобы сделать это, я думаю, что сам PHP является столь же эффективным как Присяжный острослов при использовании if/endif синтаксиса:

<?php if($some_test): ?>
   <em>Some text!</em>
<?php endif; ?>
5
ответ дан Wickethewok 24 November 2019 в 18:59
поделиться

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

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

flickr в настоящее время использует присяжного острослова. не должно быть настолько плохим, не?

6
ответ дан Gabriel Sosa 24 November 2019 в 18:59
поделиться

Существует все еще серьезное основание для шаблонной системы для использования, однако не Присяжный острослов, но PHPTAL. Шаблоны PHPTAL являются допустимым XML (и следовательно XHTML) файлы. Можно дальше использовать фиктивное содержание в PHPTAL и тем самым получить допустимый файл XHTML с заключительным появлением, которое может быть обработано и протестировано со стандартными инструментами. Вот небольшой пример:

<table>
  <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Age</th>
    </tr>
  </thead>
  <tbody>
    <tr tal:repeat="users user">
      <td tal:content="user/first_name">Max</td>
      <td tal:content="user/last_name">Mustermann</td>
      <td tal:content="user/age">29</td>
    </tr>
  </tbody>
</table>

движок шаблонов PHPTAL автоматически вставит все значения от пользовательского массива и заменит наши фиктивные значения. Тем не менее, таблица уже является допустимым XHTML, который может быть отображен в браузере по Вашему выбору.

9
ответ дан Tom Desp 24 November 2019 в 18:59
поделиться

Используя шаблоны non-PHP с оправданием разделения логики не имеет смысла. Если разработчик не понимает то, что разделение логики бизнес-представления и как оно должно быть сделано, то проблема должна быть решена соответственно. Иначе Вы заканчиваете с HTML в бизнес-логике или бизнес-логике в шаблонах - никакой механизм шаблонной обработки не собирается сохранить Вас. Необходимо преподавать разработчику основы.

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

существует одно исключение, тем не менее, где я думаю с помощью non-PHP, шаблонная обработка системы разумна: когда у логических представлением программистов должен быть ограниченный доступ к шаблонам. Например, если Вы - поставщик для системы блог-хостинга, и Вы хотите позволить Вашим пользователям персонализировать и кодировать свои шаблоны, не позволяя им выполнить произвольный код. Этот аргумент, однако, делает не , относятся к случаям, где разработчик готов изучить немного кода для помощи программированию UI. Если он может изучить Присяжного острослова, он может , конечно , изучают PHP.

12
ответ дан gasper_k 24 November 2019 в 18:59
поделиться

Главная причина люди используют шаблонные системы, состоит в том, чтобы разделить логику от представления. Существует несколько преимуществ, которые прибывают из этого.

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

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

Это также осуществляет хорошую практику программирования в держащейся отдельно бизнес-логике от логики представления. При помещении бизнес-логики, смешанной в с представлением тогда, Вам больше тяжело извлекать его, если необходимо представить его по-другому позже. Различные режимы представления в веб-приложениях все больше популярны в эти дни: RSS/Atom-ленты, JSON или ответы Ajax, WML для карманных устройств, и т.д. С шаблонной системой они могут часто делаться полностью с шаблоном и минимальным изменением в чем-либо еще.

Не все будут нуждаться или ценить эти преимущества как бы то ни было. Преимущество PHP перед Java/Python/Ruby/и т.д. состоит в том, что можно быстро изрубить веб-страницы с некоторой логикой в них, и это - все хорошо и хороший.

17
ответ дан Kylotan 24 November 2019 в 18:59
поделиться

Одним преимуществом движка шаблонов, которое я не видел, была возможность динамических элементов HTML - что-то как средства управления asp.net. Например, с Шаблоном HTML ГРУШИ Flexy у Вас могут быть динамические элементы формы, которые автоматически поддерживают состояние. Регулярный элемент выбора HTML может быть заполнен и устанавливать выбранный пункт в коде позади без циклов или условных выражений в шаблоне.

1
ответ дан rick 24 November 2019 в 18:59
поделиться

Лично я всегда использую шаблонизаторы на php, python или любом другом языке.

Первая очевидная причина, уже упомянутая другими:

Это заставляет вас не использовать никакой бизнес-логики в ваших шаблонах.

Да, конечно, дисциплина подойдет, когда она у вас есть.

Но это лишь небольшой аспект того, зачем использовать шаблонизатор. Большинство из них - это нечто большее, чем просто движок, и их можно считать шаблонизаторами, нравится вам это или нет.

Например, Smarty также имеет расширенные возможности кэширования, такие как частичное кэширование. Действительно полезные вещи, которые вам пришлось бы делать самостоятельно при использовании только php в качестве языка шаблонов.

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

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

И последнее, но не менее важное: для меня есть одна убийственная функция, доступная в некоторых фреймворках шаблонов.

Наследование шаблонов

Я познакомился с ней в Django и сейчас использую ее в последней версии Smarty 3. У ребят из фреймворка Symphony также есть Twig, который можно считать портом с синтаксисом Django.

Поначалу он выглядит немного странно, но является чрезвычайно мощным. Вы создаете свой скелет и определяете различные блоки. Вы можете расширять этот скелет и заполнять (переопределять) блоки своим содержимым.

Для меня это просто находка!

0
ответ дан 24 November 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: