стандарты кода — 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 похоже, с ними проблем нет, но по какой-то причине они чувствуют себя немного грязно!

4

Решение

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

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; ?>
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector