PSR-2兼容HTML模板中的内联PHP标记

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修复视图/ 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>

这看起来不对,所以我必须遗漏一些东西.

>是否有正确的方法来编写符合PSR-2的内联PHP?
>使用PHP的Alternative syntax for control structures会有什么问题吗?再说一次,在PSR-2和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更改.也许内联结束< blockName&gt ;;像这样:

<?php endforeach; ?>
点赞