【问题标题】:Laravel Blade without extra whitespace?Laravel Blade 没有额外的空格?
【发布时间】:2014-11-26 13:40:37
【问题描述】:

如果你这样做,你会得到一个错误:

<p>@if($foo)@if($bar)test@endif@endif</p>

如果你这样做,你会得到&lt;p&gt; test &lt;/p&gt;,增加了太多的空白:

<p>@if($foo) @if($bar)test@endif @endif</p>

有没有办法避免这种情况?

【问题讨论】:

    标签: php laravel blade


    【解决方案1】:

    尝试使用三元运算符,Laravel 中没有空格控制

    <p>{{ $foo ? ($bar ? 'test' : '') : ''}}</p>
    

    【讨论】:

    • 赞成特定示例的替代解决方案。
    【解决方案2】:

    您可以在要关闭或连接的代码之间添加{{""}},无需空格。

    <p>@if($foo)@if($bar)test@endif{{""}}@endif</p>
    

    【讨论】:

      【解决方案3】:

      您始终可以使用 packagist 上的 hedronium/spaceless-blade 包将此功能添加到 Blade。

      【讨论】:

      • 不是为 foreach loop 工作,仍然得到空间
      • 引用的包旨在消除 已解析的 Blade 指令之间的内容中的空格,而不是 相邻 指令之间的空格,它们之间只有空格。 Macin's Answer 中的链接阐明了区别。这就是 Symfony 的 Twig 引擎包含 {% spaceless %}{% endspaceless %} 的原因,尽管它的标签语法使用了开始 结束分隔符({%%})。换句话说,建议的解决方案解决了一个不同的问题。
      【解决方案4】:

      这似乎获得了很多搜索流量,所以我想我会添加一个更新来分享我这些天是如何处理这个问题的。基本上,它的代码要多一点,但最终会变得简单而干净:

      @if($foo)
        <p>Test</p>
      @elseif($bar)
        <p>Test2</p>
      @else
        <p>Test3</p>
      @endif
      

      故事的寓意是,当您使用刀片时,不要试图在元素中塞入大量条件。相反,让条件的结果包含该元素。它干净、易于阅读,而且只用了几个字符。

      【讨论】:

      • 我的面包屑有这个问题,我将它们包裹在 &lt;span&gt; 中。基本上相同的解决方案。谢谢你的回答!
      • 虽然采用这种方法让我很痛苦(因为似乎别无选择),但它却出奇地有效。谢谢!
      • @user151496 想解释一下为什么?
      【解决方案5】:

      据我所知,Blade 中没有 spaceless 标签。如果您想使用标准 Blade 标签,您将有额外的空格。有一个github discussion 提议新标签

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 2017-05-16
        • 1970-01-01
        相关资源
        最近更新 更多