Это излишество или хорошее использование HTML-помощника CakePHP? - PullRequest
8 голосов
/ 13 июля 2010

Я только что переформатировал макет приложения 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;
?>

Полагаю, по крайней мере, это выглядит красиво, компактно и довольно читабельно Какие подводные камни я должен знать в этом сценарии? Должен ли я знать о каких-либо проблемах со скоростью?

Мне нравится & mdash; а я нет.

Думаю, мне нужно убедить так или иначе.

Если вам интересно, при просмотре источника на имплоздах появляются хорошие разрывы строк в html.

Ответы [ 5 ]

10 голосов
/ 13 июля 2010

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

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

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

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

8 голосов
/ 13 июля 2010

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

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

4 голосов
/ 30 октября 2010

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

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

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

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

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

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

3 голосов
/ 13 июля 2010

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

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

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

1 голос
/ 13 июля 2010

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

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

...