【问题标题】:PSR-2 compatible inline PHP tags in HTML templatesHTML 模板中与 PSR-2 兼容的内联 PHP 标记
【发布时间】:2015-03-13 17:29:42
【问题描述】:

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>

这看起来不对,所以我一定遗漏了一些东西。

  • 是否有正确的方法来编写符合 PSR-2 的内联 PHP?
  • 使用PHP的Alternative syntax for control structures会有什么问题吗?同样,在 PSR-2 中没有提及,php-cs-fixer 似乎对它们没有任何问题,但由于某种原因,它们感觉有点脏!

【问题讨论】:

  • PSR 只适用于 PHP 代码,它对内联 HTML 没有什么可说的,因为 HTML 不是 PHP 代码。你得到的输出只是添加了空格,根据标准,应该有空格:打开 { 之后的行使用 4 个空格缩进,因此 {\n ?&gt; 等等......但如果你在按照您的方式,如果您使用替代语法(foreach(): 此处标记为&lt;?php endforeach; ?&gt;),输出可能看起来会更好
  • 感谢@EliasVanOotegem,一如既往的有用。我将使用替代语法。如果您将其粘贴为答案,我会接受
  • 完成,作为答案发布了更多细节...... PS:“一如既往的有用” -> 感谢您的赞美:-P 快乐编码
  • @downvoter,为什么?完全有效的问题...
  • 投票反对-1,因为没有动机的-1对IMO没有帮助。至于原因,我只能猜测,但我怀疑这是因为这个问题与 code 没有直接关系(如:尝试编写 X,但无法使其工作),而是关于工具的问题

标签: php code-standards psr-2


【解决方案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&lt;blockName&gt;;

<?php endforeach; ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多