PSR-2没有提到任何适用于在HTML模板中使用内联php标记的内容,但php-cs-fixer
tool似乎有一个标准。
这是我的模板文件,然后在其上运行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
中没有提及它们似乎没有任何问题,但由于某种原因它们感觉有点脏!答案 0 :(得分:2)
根据要求:评论发布为答案:
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; ?>