Как стать автором
Обновить
23
0
Константин Кудряшов @everzet

Пользователь

Отправить сообщение
Количество логического мусора на экране все-равно зашкаливает.
Опять эта экономия спичек на фоне пожара.
Назовите мне хоть одну вменяемую причину использования `,` вместо `.`.
Потому что конкатенация строк в php — .. Если я захочу эту строку записать в переменную вместо вывода в буфер, я просто поменяю echo на $echo = , а вам придется менять все запятые.
Это не наследование, а декорация. Фабиен попытался сделать его похожим на наследование в твиге, отсюда и неверное применение термина «наследование». Наследование вот: twig.sensiolabs.org/doc/templates.html#template-inheritance. Опять повторюсь — Twig построен вокруг идеи наследования — это основа шаблонизатора. Разница в том, что в декораторе из Templating component тебе всегда нужно рендерить содержимого дочерний слота, даже если тот переопределяет совсем другой блок. Рендеринг словно идет сверху вниз, когда как Twig обрабатывает шаблоны снизу вверх. Отсюда куча неучтенных мелочей типа
{% block title %}
{{ parent() }}
— News
{% endblock %}
Как только вы начнете использовать модель декорации (наследования) шаблонов, вы поймете, что ЛЮБОЙ проект лучше ложиться в нее, нежели в более привычную (пока) вам схему инъекции ;-)
Как относится Templating component к шаблонному наследованию, на котором построен Twig?

Давай ты мне через 30 минут покажешь готовый рабочий пример того, что я описал выше на чистом php через Symfony\Component\Templating ;-)

Прежде чем безапелляционно заявлять что-либо, попробуй для начала сам почитать линки, которые приводишь ;-)
Не знаю как смарти, но твиг логику представления от бизнес логики отделяет на ура. В отличие от чистого PHP. На то есть объективные причины:
habrahabr.ru/blogs/webdev/127906/#comment_4224465
Уважаемый, это не наследование, а инъекция. Давайте приведу понятный вам пример. У вас есть список новостей, который находится в лэйауте внутренних страниц сайта, который находится в главном лэйауте сайта. То есть, вы генерируете шаблон списка новостей, а тот сам уже себя заворачивает в специфичный лэйаут, который в свою очередь может завернуть себя в другой лэйаут и так далее. При этом, ваш шаблон списка страниц может переопределить блок (слот) в любом шаблоне (лэйауте), находящемся выше уровнем. Крайне логично, не правда ли? А теперь попробуйте мне привести пример подобного шаблона на чистом php.
fabien.potencier.org/article/34/templating-engines-in-php
fabien.potencier.org/article/35/templating-engines-in-php-follow-up

PHP уже давно перестал быть шаблонизатором домашних страничек. Со своей современной целью (отделение представления от логики) php в качестве шаблонизатора справляется плохо. Самые явственные минусы:

  1. Отсутствие песочницы. Все функции, описанные в глобальном скопе доступны из всех php «шаблонов».
  2. Отсутствие наследования. Сборка шаблона сверху вниз является нелогичной для современного дизайна и контента. Сегодня на любом проекте вы верстаете сверху вниз, но выводите контент снизу вверх, что в случае с чистым php — невозможно.
  3. Расширяемость. Вы можете сколько угодно доказывать, что

    <? foreach($category_tree as $category): ?>
        <?= $category->name ?>
    <? endforeach; ?>
    

    То же самое, что и
    {% for category in category_tree %}
        {{ category.name }}
    {% endfor %}
    

    Но вы никогда не сможете доказать, что
    <? if (count($category_tree)): ?>
        <? foreach($category_tree as $category): ?>
            <?= $category->name ?>
        <? endforeach; ?>
    <? else: ?>
        No items in tree
    <? endif; ?>
    

    Хотя бы близко столь же читаем, сколько
    {% for category in category_tree %}
        {{ category.name }}
    {% else %}
        No items in tree
    {% endfor %}
    


P.S.: «шорт»-тэги — зло. Об этом тысячи статей по всему интернету, так что ваш шаблон должен выглядеть вообще вот так:
<?php if (count($category_tree)): ?>
    <?php foreach($category_tree as $category): ?>
        <?php echo $category->name ?>
    <?php endforeach; ?>
<?php else: ?>
    No items in tree
<?php endif; ?>
Одно из самых больших заблуждений web-программистов. Не важно как быстро работают отдельные инструкции. Важно насколько они читабельны, насколько итоговый код расширяем и масштабируем! Остальное — синдром «гипероптимизации», который обычно приводит к отсутствию как читабельности, так и масштабируемости.
PHP как шаблонизатор не справляется с основной своей задачей — отделить логику от представления. Фабиен эту тему достаточно широко раскрыл в своем блоге 2 года назад (когда начал контрибутить в twig):
fabien.potencier.org/article/34/templating-engines-in-php
fabien.potencier.org/article/35/templating-engines-in-php-follow-up
На выходе каждого шаблона twig — обычный php класс, содержащий метод render(), определяющий строчки типа echo "".$yourVar.""; внутри. В некоторых местах он даже быстрее привычной в остальных фреймворках ?php шаблонизации, ибо не использует подавление вывода.
Вы както вообще отличаете понятия «bleeding edge» от «2 года как stable»? Советую начать. То, что вам не нравиться хоть изредка обновлять свой код еще не значит, что команда разработчиков php должна за бесплатно пилить устаревшую ветку интерпретатора 5-летней давности:
Команда разработчиков PHP заявляет что PHP линейки 5.2 более не поддерживается и всем настоятельно рекомендуется обновиться до PHP 5.3.8

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

А с чего вы взяли, что мне или кому-бы то ни было еще, подобные люди интересны и важны?

И я не буду форсированно переводить свои серверы на 5.3 до тех пор, пока они весь ппц в головах не починят и не перестанет быть возможен выход 5.3.7

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

5.3 отстабилился в середине 2009! Нет, вы скажите, так сложно за 2 года убрать из проектов баги перехода и обновить сервера???
Ага. А теперь установите этот свой «новый эверноут» своим программистам и тестировщикам и попросите их при вас окно поресайзить.
Бэклог с историями не храниться в репозитории кода
Почему? Что мешает юзер-стори хранить в коде???

не совсем BDD, т.к. менее детально — не определяет поведение методов в каждом случае
У Вас какая-то путаница в голове по поводу BDD. Есть 2 типа BDD — спецификационное и сценарное. Первое описывает поведение системы изнутри на примере объектных спецификаций, второе описывает поведение системы снаружи на примере поведенческих сценариев всей системы в целом. И я говорю про сценарный BDD, который подходит для реализации желаний Тома намного лучше нежели Readme файл:
github.com/knplabs/mink-demo/blob/master/features/search.feature
Человек описал типичный feature-файл из BDD или user-story из Scrum и назвал его «новой методологией». Обожаю, когда люди не изучившие важных аспектов «хаемых» систем начинают придумывать новые, решающие те же проблемы тем же путем :-D

Информация

В рейтинге
Не участвует
Откуда
Минск, Минская обл., Беларусь
Дата рождения
Зарегистрирован
Активность