HTML 模板中的 PSR-2 兼容内联 PHP 标签
PSR-2 compatible inline PHP tags in HTML templates
PSR-2 doesn't mention anything that would apply to the use of inline php tags in HTML templates, yet the 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 个空格缩进
- ...
这就是为什么:
<?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; ?>
PSR-2 doesn't mention anything that would apply to the use of inline php tags in HTML templates, yet the 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 个空格缩进
- ...
这就是为什么:
<?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; ?>