2010-07-13 4 views
8

Я просто переформатировал макет по умолчанию моего приложения CakePHP. Я удалил как можно больше встроенного html, поместив практически все методы html helper.Является ли это излишним или полезным использованием HTML-помощника CakePHP?

Было весело, но мне интересно, какую выгоду я получил от этого упражнения, если он есть?

<?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 при просмотре источника.

+4

Вы знаете, что было бы более чистым, быстрым и более кратким? Прямой HTML. Я не могу придерживаться такой синтаксической замены 1-к-1. Напишите HTML в HTML. Не делайте обувной рожок у среднего человека ради того, чтобы избегать ужасных '' тегов. – meagar

+1

Ну, скорость не проблема. Я завернул код в вызовы microtime, а представление отобразилось в 0.00459 секунд. – Stephen

+0

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

ответ

10

Я провел эту дискуссию в группе Google несколько лет назад. В конце концов вы поймете, что это не имеет большого значения, каким образом вы это делаете, пока вам не понадобится программно манипулировать вещами, - тогда, если вы поехали по маршруту HTML, вы найдете свой код, напертый с помощью <?php & ?> или конкатенации строк или замены переменных двойной кавычки.

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

Существует много HTML, которые не покрываются помощниками, поэтому вы не можете избежать микса, но вы можете свести к минимуму сложность и путаницу, используя, по возможности, помощники. Когда вы начинаете использовать формы, вы получаете много загруженных материалов безопасности, а идентификаторы и NAME форматируются способом CakePHP предпочитает.

PHP и CakePHP предназначены для этого. Почему использовать только половину языка или половину рамки?

+0

Это меня продало. Благодаря! – Stephen

+1

Peppering ваш код с '' это то, что PHP для: Это система шаблонов. Просто держите логику контроллера отдельно от логики отображения, и ваши файлы шаблонов должны, естественно, оставаться довольно чистыми. – meagar

+2

Извините, meagar, но я не согласен с вами. Манипулирование просмотром данных является неотъемлемой частью представления. Оставшиеся верные архитектуре MVC не подразумевают представления без кода. Держите бизнес-логику вне поля зрения, непременно ... но соберите, соедините, переверните и иным образом манипулируйте тем, как вы хотите просматривать ваши данные в VIEW. – Stephen

1

Программно, это очень правильно, потому что вы никогда не строите строку. Приятно, что, поскольку каждая вещь является функцией, вы можете передать ей всевозможные параметры и направить все логики на ваши контроллеры. Таким образом, ваш заголовок, например, может быть динамически сгенерирован для каждой страницы, а затем передан на ваш вызов $html->tag('title', 'Title For App').

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

+0

Сложность манипулирования данными может быть легко передана элементам или пользовательским помощником. В последнее время я работаю так, и я должен сказать - для кого-то, кто предпочитает писать php, чем html, - это кажется более легким в обслуживании. –

8

Несомненным преимуществом этого является 100% правильный синтаксис, так как вы удалили любую возможность перетаскивания жира и отсутствовали открытые/закрывающие теги. То, что я могу вам рассказать по опыту, - это то, что через полгода он будет в два раза труднее читать и модифицировать эту структуру. Также очень сложно вставить условные элементы. Вам нужно прибегнуть к тернарному оператору здесь, что делает вещи еще менее удобочитаемыми.

В целом, я бы рекомендовал пойти с традиционным сочетанием HTML/PHP.

3

С помощью помощников вы в какой-то мере будете в будущем проверять свой код. Поэтому, когда HTML5 приходит, и теги html или head меняются в новой спецификации. Теоретически вы просто меняете свой html-хелпер-класс, и вся ваша разметка - HTML5.

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

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

4

Лично я конфликтую с этим, но я выбираю режим HTML + PHP при работе с PHP. Я также вижу преимущества обоих, но именно поэтому я выбираю HTML + PHP:

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

    Если бы я работал с языком, подобным Python или Java, я бы предпочел бы предпочтительную форму, которую вы предлагаете, но это просто не идеальное решение при работе с PHP.

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

  3. Абсолютная гибкость без добавления дополнительных слоев API.

Как побочный эффект этого, я предпочитаю использовать for(): и endfor; синтаксис и т.д., а также стремиться к никогда эхо HTML теги - Я реструктурировать, чтобы избежать этого (то есть, не используя методы, если только внутри хелпер и т. д., и в этом случае я создам свои теги с помощью Html Helper, потому что это просто немой взгляд, чтобы иметь HTML-суп внутри класса или функции PHP: P).

+0

Я давно принял ответ Лео, но с тех пор я перешел к тому, что вы описали здесь. Я использую HTML-помощник CakePHP в методах и простой HTML в шаблонах (кроме «динамических» вещей, таких как ссылки.Использование HTML-помощника для ссылок не позволяет мне изменять все мои представления при настройке новых маршрутов). – Stephen

+0

Ах, я должен был упомянуть, что я использую Help и Html Helpers в своих представлениях вместо того, чтобы вручную создавать формы и ссылки. Кроме того, функция __() для i18n. – Iiridayn

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