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-cs-fixer
похоже, с ними проблем нет, но по какой-то причине они чувствуют себя немного грязно!По запросу: комментарий опубликован как ответ:
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; ?>
Других решений пока нет …