Я просто переформатировал макет по умолчанию моего приложения CakePHP. Я удалил как можно больше встроенного html, поместив практически все методы html helper.
Это было весело, но мне интересно, какую пользу я получил от этого упражнения, если таковые имеются?
<?php $output = implode("\n", array( $html->docType(), $html->tag('html', implode("\n", array( $html->tag('head', implode("\n", array( $html->charset(), $html->tag('title', 'Title For App'), $html->css('css', NULL, array('media' => 'screen,print')), $html->css('print', NULL, array('media' => 'print')), $html->script(array('cufon', 'jquery','external')) ))), $html->tag('body', implode("\n", array( $html->tag('div', $content_for_layout, array('id' => 'wrapper')), $html->scriptBlock('Cufon.now();') ))) )), array('xmlns' => 'http://www.w3.org/1999/xhtml')) )); echo $output; ?>
Полагаю, по крайней мере, он выглядит красивым и компактным и довольно читабельным. Какие подводные камни мне следует знать в этом сценарии? Должен ли я знать о любых проблемах с производительностью?
Мне это нравится – и я этого не делаю.
Наверное, мне нужно убеждать так или иначе.
Если вы задаетесь вопросом, они будут помещать хорошие строки в html при просмотре источника.
Несколько лет назад я провел эту дискуссию в группе Google. В конце концов, вы поймете, что это не имеет большого значения, каким образом вы это делаете, пока вам не понадобится программно манипулировать вещами, – тогда, если вы поехали по маршруту HTML, вы найдете свой код, напертый с помощью <?php
& ?>
или конкатенации строк или замены переменных двойной кавычки.
Теперь, многие приложения в очереди, я предпочитаю поддерживать те, у которых больше помощников, чем разметка.
Существует много HTML, которые не покрываются помощниками, поэтому вы не можете избежать микса, но вы можете свести к минимуму сложность и путаницу, используя, по возможности, помощники. Когда вы начинаете использовать формы, вы получаете много загруженных материалов безопасности, а идентификаторы и NAME форматируются так, как предпочитает CakePHP .
Для этого созданы PHP и CakePHP . Почему использовать только половину языка или половину рамки?
Неоспоримым преимуществом этого является 100% правильный синтаксис, так как вы удалили любую возможность перетаскивания жира и отсутствовали открытые / закрывающие теги. То, что я могу вам рассказать по опыту, – это то, что через полгода он будет в два раза труднее читать и модифицировать эту структуру. Также очень сложно вставить условные элементы. Вам нужно прибегнуть к тернарному оператору здесь, что делает вещи еще менее удобочитаемыми.
В целом, я бы рекомендовал пойти с традиционным сочетанием HTML / PHP.
Лично я конфликтую с этим, но я выбираю режим HTML + PHP при работе с PHP. Я тоже вижу преимущества, но именно поэтому я выбираю HTML + PHP:
PHP – это язык шаблонов – лучший. Являясь языком шаблонов, я чувствую, что он намного превосходит любой другой язык шаблонов PHP, а также многие языки шаблонов в других языковых веб-инфраструктурах, поскольку это гибкость и сила.
Если бы я работал с языком, например Python или Java, я бы предпочел бы предпочтительную форму, которую вы предлагаете, но это просто не идеальное решение при работе с PHP.
Вы теряете возможность использовать множество инструментов, уже разработанных для работы с самим HTML. Вы особенно теряете людей, которым удобно модифицировать HTML, и которые могли бы в противном случае сделать простые изменения в самих представлениях.
Абсолютная гибкость без добавления дополнительных слоев API.
В качестве побочного эффекта я склонен использовать for():
и endfor;
синтаксис и т. д., и стремиться никогда не эхом HTML-тегов – я буду реструктурировать, чтобы избежать его (т. е. не использовать методы, кроме встроенного помощника и т. д.), и в этом случае я создам свои теги с помощью Html Helper, потому что это просто немой взгляд иметь HTML-суп внутри класса или функции PHP: P).
Используя помощники, вы, в некотором роде, будете в будущем проверять свой код. Поэтому, когда HTML5 приходит, а теги html
или head
меняются в новой спецификации. Теоретически вы просто меняете свой html-хелпер-класс, и вся ваша разметка – HTML5.
Однако, напротив, вы также полагаетесь на Cake для создания хорошо сформированных тегов. Хотя многие из этих фреймворков представляют собой полный стек, неизбежно возникают некоторые области, которые они обрабатывают лучше других. Вы не должны ожидать, что они установят весь набор тегов HTML.
Я лично считаю, что это слишком сложно делать то, что вы сделали. Мне нравится использовать HTML-помощники для ссылок, URL-адресов и включенных файлов из-за преимуществ отображения каталога. Но я не использую помощников для создания простого тега div
.
Программно, это очень правильно, потому что вы никогда не строите строку. Приятно, что, поскольку каждая вещь является функцией, вы можете передать ей всевозможные параметры и направить все логики на ваши контроллеры. Таким образом, ваш заголовок, например, может быть динамически сгенерирован для каждой страницы, а затем передан в ваш $html->tag('title', 'Title For App')
.
Однако из-за большого количества вызовов функций я подозреваю, что он не будет работать так же просто, как просто использовать PHP для циклических и эхо-переменных.