PHP против шаблонизатора

В настоящее время я обсуждаю выбор между PHP как механизмом шаблонов и механизмом шаблонов поверх PHP.

Каков ваш выбор и почему?

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


person Community    schedule 08.04.2009    source источник
comment
@gregmac Предоставлена ​​неверная ссылка (страница не найдена)   -  person nowox    schedule 12.06.2015
comment
движки шаблонов компилируются в собственный php, поэтому при использовании механизма шаблонов нечего терять и так много выигрывать. Если вы посмотрите на любой современный шаблонизатор, такой как smarty или twig, вы увидите, что они компилируют шаблоны в исходный php, поэтому результат будет таким же, как если бы вы создали страницу на php вручную. но движки шаблонов знают, как скомпилировать php-страницу лучше, чем человек, поскольку движки шаблонов поддерживаются тысячами людей.   -  person Patrick W. McMahon    schedule 11.12.2015
comment
Если вы привыкли использовать механизм шаблонов, создание шаблона / представления с помощью простого PHP будет казаться утомительным и утомительным / трудным для чтения. Тем не менее, правильный ответ - просто полностью пропустить механизм шаблонов php и сразу перейти к KnockoutJS или AngularJS для своих шаблонов и использовать AJAX для всего. Развлекайся!   -  person Andrew    schedule 11.01.2017


Ответы (20)


Для шаблонизаторов:

  1. Добавлена ​​безопасность для настройки конечного пользователя. Темы в чистом PHP обладают неограниченной способностью причинять вред пользователю и своей установке. Таким образом, шаблонизатор устраняет этот риск, если он хороший.
  2. Простота использования для непрограммистов, например художников-графиков или веб-дизайнеров.

Для простого php:

  1. Скорость чистого PHP не может сравниться ни с одним движком шаблонов, построенным на нем.
  2. Для вывода доступны все возможности PHP, а не только интерпретируемая или отфильтрованная часть.

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

person Community    schedule 08.04.2009

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

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

person Community    schedule 08.04.2009
comment
Спасибо за разумный ответ о реальных преимуществах Smarty. Речь идет не о расширении или улучшении функциональности, а о содействии хорошей практике! - person Nicole; 03.08.2010
comment
Ничто не сравнится с хорошей архитектурой приложения и передовыми методами проектирования. Механизмы шаблонов обеспечивают более медленный вывод, еще один язык для изучения. Не следует позволять каким-либо данным передаваться в представление как недопустимые, и все данные должны быть подготовлены для представления перед его передачей. Я действительно не понимаю, в чем суть этих двигателей. Еще одна обертка, которая замедлит вывод. Нет большой разницы между синтаксисом механизма шаблонов и синтаксисом php. Также UI ребята будут обрабатывать js-код, поэтому я не понимаю, почему UI-разработчики должны держаться подальше от php. Это просто инверсия контроля. - person Tudor; 13.05.2014
comment
@NickC, у шаблонов есть тот недостаток, что вам нужно сначала выполнить всю бизнес-логику, прежде чем вы начнете выводить. Невозможно делать вывод на лету. - person Pacerier; 27.01.2015
comment
@Pacerier Я не понимаю, почему это недостаток. Мне сложно придумать, каким образом вывод на лету является хорошей идеей. - person Nicole; 27.01.2015
comment
@NickC, во многих случаях это хорошая идея. Например. при отображении журналов или статусов загрузки страниц и получения данных. - person Pacerier; 30.01.2015
comment
@Pacerier Я почти всегда делаю это, заранее создавая функции бизнес-логики и создавая хуки в системе шаблонов для вызова функций по мере необходимости. - person Nicole; 05.02.2015

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

person Community    schedule 08.04.2009
comment
Ты все еще так себя чувствуешь? То же самое через пять лет? Мне нужно принять некоторые решения. Единственное, что мне не нравится использовать PHP, так это то, что скобки иногда трудно выпрямить. - person johnny; 29.08.2014
comment
@johnny, ваше время не будет потрачено на изучение этого. Он изучает его полностью, включая все подводные камни, крайние случаи и прочее, что является пустой тратой времени. И если вы не потратите время, чтобы изучить его полностью, вы все равно все равно потеряете время из-за исправления ошибок и проблем с безопасностью. - person Pacerier; 27.01.2015
comment
@johnny, как и у вас, у меня проблемы с парой скоб (при условии, что некоторые из них связаны с плохим зрением). Чтобы помочь с этим, я использую альтернативный синтаксис. Очень помогает. php.net/manual/en/control-structures.alternative-syntax. php - person Wranorn; 19.08.2015
comment
В итоге я использовал обычный старый PHP. Мне еще предстоит найти причину, чтобы не использовать его. Если это презентация, какое это имеет значение? - person johnny; 19.08.2015
comment
@johnny Просто используйте IDE. - person Mārtiņš Briedis; 19.02.2016
comment
@ MārtiņšBriedis Я не слежу. - person johnny; 19.02.2016
comment
@johnny где ты пишешь свой код? - person Mārtiņš Briedis; 20.02.2016

Возможны следующие причины:

  • Разделение вашего приложения на шаблоны с помощью движка делает ваше приложение менее уязвимым для остановки ошибок кода.
  • Использование шаблонов может дать вам большую гибкость в будущем при рефакторинге, поскольку пространство имен не будет напрямую встроено в приложение.
  • Использование шаблонов побуждает (заставляет) разработчиков держать бизнес-логику и код ВНЕ уровня представления.
  • Используя шаблоны, легче создавать макеты наборов данных и передавать их в шаблонизатор, чтобы получить предварительный просмотр того, как сайт будет выглядеть с данными.
person Community    schedule 08.04.2009
comment
Да, в идеале программисты не заботятся о том, чтобы у них был упрощенный шаблон, верно? Я имею в виду, что мы знаем php в целом, зачем нам его сокращенная часть, это полезно только для некодеров. --- На самом деле, когда у вас есть стек sql, php, html, css и js, с которым нужно иметь дело, многословность и сложность html в вашем php является серьезным недостатком, замедляющим вас, а также позволяющим не разделять логики отображения. В конце концов, создание шаблонов - это всегда лучший способ. - person Kzqai; 02.10.2012
comment
Всех этих проблем бы не существовало, если бы вы с самого начала спроектировали свое приложение правильно. Даже если вы не используете шаблонизатор, вам следует разделить бизнес-логику и логику представления. По сути, единственное, что вам нужно, это диспетчер, который может переносить ваши переменные из области контроллера в область просмотра. - person Gladen; 05.08.2014

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

Тем не менее, я ухожу от использования шаблонов, когда остаюсь только я (или я и другие разработчики).

person Community    schedule 08.04.2009

PHP не шаблонизатор, а язык, который можно использовать для написания шаблонов или шаблонизаторов. Механизм шаблонов - это не только язык, но и программный API, который позволяет сценариям находить, организовывать шаблоны или назначать им данные из сценария. Чистый PHP ничего не предлагает вам - это просто язык. Вместо этого вы должны взять для сравнения такие библиотеки, как Zend_View в Zend Framework (в основном, он работает точно так же, как Smarty, за исключением того, что использует PHP для написания шаблонов). Вы должны спросить, следует ли вам использовать механизм шаблонов с PHP или что-то еще в качестве языка шаблонов.

Что касается самих языков шаблонов, то что ж ... обычных циклов и условий достаточно для написания шаблонов, но это «достаточно» не означает, что это легко, удобно, эффективно или гибко. PHP не предлагает ничего особенного для разработчиков шаблонов, но многие «языки шаблонов» (например, Smarty) предоставляют только ограниченное подмножество PHP, поэтому я не удивлен, что программисты выбирают PHP. По крайней мере, они могут писать функции и использовать ООП, что для этого слишком массивно (на мой взгляд), но действительно работает и действительно помогает.

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

  • Отображение и рендеринг форм (я не встречал фреймворка с PHP в качестве языка шаблонов, который предоставлял бы простую, гибкую и универсальную систему для настройки внешнего вида формы).
  • Понимание структуры документа HTML / XML.
  • Автоматические инъекционные фильтры XSS.
  • Решение различных распространенных проблем на уровне представления (например, настройка внешнего вида системы разбивки на страницы, отображение данных в столбцах и т. Д.)
  • Переносимость шаблонов и истинное отделение логики приложения и деталей реализации от шаблонов.

Примеры языков шаблонов, которые следуют этому пути, упомянуты выше PHPTAL и Open Power Template 2. Некоторые аналогичные идеи также можно найти в TinyButStrong, но, к сожалению, этот механизм шаблонов работает очень медленно.

person Community    schedule 10.07.2009
comment
+1 за необходимость предотвращения XSS. ‹? Php echo htmlentities ($ name, ENT_QUOTES, 'UTF-8');?› Для каждой переменной ужасно, но почти то, что необходимо, и даже функция-оболочка ‹? Php h ($ name);?› Нет почти так же хорошо читается и поддается сканированию, как {{name}}. - person Kzqai; 02.10.2012
comment
@Zyx, PHP - это язык, который позволяет делать то, что делают движки шаблонов. Это инструмент, который можно использовать в качестве механизма шаблонов. Другими словами, это механизм шаблонов. - person Pacerier; 27.01.2015

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

По умолчанию выходные данные PHP не экранируются, поэтому, если вы не помните, что строго повсюду добавляете htmlspecialchars(), ваш сайт будет иметь уязвимости HTML-инъекции (XSS).

<p>Hello <?= $name ?></b>
<!-- Simple template full of errors -->

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

Вот почему я рекомендую PHPTAL. OPT2 тоже подойдет.

person Community    schedule 25.05.2009

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

Плюсы:

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

Минусы:

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

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

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

person Community    schedule 30.11.2009

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

Стандартные, например Smarty или PHPTAL отлично подойдут, если у вас нет времени на создание собственного (и вам не требуется больше, чем они предлагают). Кроме того, вы можете довольно легко заменить / изменить их позже, если обнаружите, что вам нужно что-то более специализированное.

У меня лично был хороший опыт работы с PHPTAL, прежде всего потому, что он не мешает вам и прост.

person Community    schedule 08.04.2009

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

person Community    schedule 08.04.2009

В следующей статье резюмируются различные точки зрения на механизмы шаблонов для PHP.

Создание шаблонов PHP третьего типа http://www.tinybutstrong.com/article_3rd_kind.html

person Community    schedule 01.04.2011
comment
wysiwyg ... серьезно? Это шаг назад? - person Pacerier; 27.01.2015
comment
Wysiwyg настолько везде, что больше не упоминается. Тем не менее, некоторые инструменты дизайна все еще не являются Wysiwyg. Специально для HTML-страниц: 50% разработчиков используют редакторы визуального дизайна (wysiwyg), а 50% разработчиков предпочитают текстовые редакторы (не wysiwyg). - person Skrol29; 23.02.2015

Мой выбор для любого нового проекта, вероятно, состоял бы в том, чтобы просто использовать возможности PHP по созданию шаблонов, возможно, в сочетании с фреймворком MVC, вместо использования другого механизма шаблонов. В конце концов, для простоты кода или ясности разделения не имеет значения, есть ли у вас {$myVar} или <?= $myVar ?> в вашем коде. Более сложные функции шаблонов, такие как условия, циклы или бэкэнд-технологии, такие как кеширование, могут обрабатываться так же (или лучше) с помощью PHP или инфраструктуры MVC.

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

person Community    schedule 04.06.2009

Я не знаю, связано ли это с VirtueMart, Joomla или концепцией шаблонов в PHP, но настроить VirtueMart для вашей собственной графической темы - это ЧИСТЫЙ АД. (Я не говорю о простом CSS-стиле.)

person Community    schedule 04.06.2009
comment
Это потому, что Virtuemart - одно из приложений с худшим кодом, с которыми я когда-либо сталкивался. У виртуальной машины действительно нет системы шаблонов, шаблоны - это просто беспорядок функций, встроенный код PHP и недопустимый HTML. - person DisgruntledGoat; 27.07.2009

PHP - это не шаблонизатор, а язык сценариев.

person Community    schedule 04.06.2009

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

Мой личный выбор - Raintpl, потому что он легкий, дружелюбный и быстрый, здесь вам поможет тест (также умный и сообразительный - это хорошо!):

http://www.raintpl.com/PHP-Template-Engines-Speed-Test/

person Community    schedule 10.01.2011

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

person Community    schedule 08.04.2009
comment
Время, потраченное на изучение нового языка шаблонов, ничтожно по сравнению со временем, которое вы потратите на написание и отладку этих шаблонов, поэтому я думаю, что это хорошее вложение времени. - person Kornel; 26.05.2009
comment
вам нужно гораздо больше времени на изучение фреймворка, чем на изучение механизма шаблонов - person Sameera Kumarasingha; 06.05.2014

После того как я задал этот вопрос, я наткнулся на усы. Это язык шаблонов без логики.

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

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

person Community    schedule 20.07.2012
comment
Просматривайте модели, которые затем быстро становятся тесно связанными с шаблоном усов и поэтому их очень трудно использовать повторно. Представление не «лишено логики», нет ничего плохого в том, чтобы иметь логику представления в шаблонах представления, она должна быть там! - person Leven; 30.09.2013
comment
Мне нравятся чистые взгляды, в которых как можно меньше логики. Таким образом, им легко следовать. Преимущество этого состоит в том, что в ваших представлениях очень мало функциональных возможностей, которые действительно нужно тестировать. Просмотр моделей должен быть привязан к ракурсу, они идут парой. Комбинация того и другого - это то, что можно использовать повторно. - person Ikke; 30.09.2013

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

Я использую шаблонизатор под названием KudzuPHP. Это порт моего KudzuASP для Classic ASP. Он отличается от многих механизмов шаблонов тем, что код, в котором размещены бизнес-правила и логика, становится обработчиком событий для механизма шаблонов после его вызова. Этот подход позволяет вам изменять шаблоны (перемещая большие блоки представления), не требуя изменения кода PHP-кода.

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

Вы можете найти KudzuPHP здесь: http://www.andrewfriedl.com/downloads/ Если вам нужен Версия, встроенная в плагин Wordpress, которая позволяет вам писать код для Wordpress API без PHP, перейдите на Wordpress.org и найдите плагины по запросу "Kazoo".

person Community    schedule 28.07.2013

в настоящее время он самый быстрый и простой в использовании. После создания набора тестов для движков шаблонов PHP, twig занимает второе место сразу после родного языка php.

person Community    schedule 01.09.2012
comment
где эти результаты - person Isaac; 23.01.2017

Я недавно написал об этом в блоге.

Только из соображений безопасности обязательно используйте движок шаблонов (Twig безопасен).

Хороший движок шаблонов (например, Twig) предлагает:

  • Безопасность (самое главное, что бы это ни было)
  • Не подробный (например, php)
  • Дополнительные функции шаблонов
person Community    schedule 08.08.2012
comment
Ой! Эту страницу нельзя найти. - person krishna; 25.07.2016