Совместимые с PSR-2 встроенные теги PHP в шаблонах HTML

PSR-2 не упоминает ничего, что могло бы относиться к использованию встроенных php в HTML-шаблонах, однако php-cs-fixer инструмент, похоже, имеет для этого стандарт.

Это мой файл шаблона перед запуском на нем php-cs-fixer:

<nav>
    <ul>
        <li>
            <a href="#">Link</a>
<?php
if (! empty($subnav)) {
?>
            <ul class="subnav">
<?php
    foreach ($subnav as $link) {
?>
                <li><?=$link?></li>
<?php
    }
?>
            </ul>
<?php
}
?>
        </li>
        <li><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
    </ul>
</nav>

И после запуска php-cs-fixer fix views/ui/nav.php --level=psr2:

<nav>
    <ul>
        <li>
            <a href="#">Link</a>
<?php
if (! empty($subnav)) {
    ?>
            <ul class="subnav">
<?php
    foreach ($subnav as $link) {
        ?>
                <li><?=$link?></li>
<?php

    }
    ?>
            </ul>
<?php

}
?>
        </li>
        <li><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
    </ul>
</nav>

Это просто выглядит неправильно, поэтому я должен что-то упустить.

  • Есть ли правильный способ написать такой встроенный PHP, который будет соответствовать PSR-2?
  • Будет ли что-то не так с использованием альтернативного синтаксиса PHP для управляющих структур ? Опять же, в PSR-2 нет упоминания, а у php-cs-fixer, кажется, нет никаких проблем с ними, но почему-то они кажутся немного грязными!

person Josh Harrison    schedule 15.01.2015    source источник
comment
PSR применяется только к PHP-коду, он ничего не говорит о встроенном HTML, потому что HTML не является PHP-кодом. Вывод, который вы получаете, просто добавляет пробелы там, где, согласно стандарту, должны быть пробелы: строка после открытия { имеет отступ с использованием 4 пробелов, следовательно, {\n ?> и т. д. ... но если вы используете PHP так, как вы это делаете , вывод может выглядеть лучше, если вы используете альтернативный синтаксис (здесь foreach(): разметка <?php endforeach; ?>)   -  person Elias Van Ootegem    schedule 15.01.2015
comment
Спасибо @EliasVanOotegem, как всегда полезно. Я пойду с альтернативным синтаксисом. Если вы вставите это как ответ, я приму   -  person Josh Harrison    schedule 15.01.2015
comment
Готово, опубликовано как ответ с некоторыми подробностями... PS: как всегда полезно -› спасибо за комплимент :-P приятного кодирования   -  person Elias Van Ootegem    schedule 15.01.2015
comment
@downvoter, почему? Совершенно правильный вопрос...   -  person Josh Harrison    schedule 15.01.2015
comment
Проголосовал против -1 на том основании, что -1 без мотивации бесполезен, ИМО. Что касается причины, я могу только догадываться, но я подозреваю, что это потому, что этот вопрос не связан напрямую с кодом (например, попытка написать X, но не может заставить его работать), а скорее вопрос по инструменту   -  person Elias Van Ootegem    schedule 15.01.2015


Ответы (1)


По запросу: комментарий опубликован как ответ:

PSR применим только к PHP-коду, он ничего не говорит о встроенном HTML, потому что HTML просто не PHP.

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

Вот почему это:

<?php
if(!empty($subnav)){//note no spaces
?>

Будет изменено на:

<?php
if (!empty($subnav)) {
    ?>

В вашем коде foreach вы заметите, что все уже имеет отступ в 4 пробела, потому что код находится внутри блока if.

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

<?php
if (!empty($subnav)):
?>
//markup
<?php
    foreach ($subnav as $link):
        //do stuff
?>
//markup
<?php
    endforeach;
endif;
?>

Обратите внимание, что отступ закрывающих тегов, вероятно, будет изменен php-cs-fixer. Возможно, встроить end<blockName>; так:

<?php endforeach; ?>
person Elias Van Ootegem    schedule 15.01.2015