【问题标题】:why laravel blade @yield adds a new line (line break)为什么 laravel Blade @yield 添加新行(换行符)
【发布时间】:2014-12-24 05:58:39
【问题描述】:

我正在使用 blade templatinglaravel 4.2

我对与@section 函数配合使用的@yield 函数有一点问题。

假设在我的布局模板layout.blade.php我有以下声明:

<meta name="description" content="@yield('description')">

contact.blade.php 扩展 layout.blade.php 我有这个:

@section('description')
    this is the contact page
@stop

输出是这样的:

<meta name="description" content="this is the contact page
">

问题是line break在部分渲染的末尾自动添加。

您知道如何避免这种不良行为吗?

【问题讨论】:

  • 你试过@section('description')this is the contact page@stop没有换行吗?或者,你试过不关心吗?新行不应该破坏任何东西。
  • @ceejayoz 我试过这个,但它破坏了代码,因为 @section@stop 函数不能在同一行。
  • 该死,真可惜。

标签: php laravel template-engine blade


【解决方案1】:

您可以使用{{trim(View::yieldContent('description'))}}

解释。

我遇到了同样的问题。我在页面上有几个模态窗口,它们有一个共同的布局,但不同的主体、标题和“id”属性。因此,“id”属性应该在没有任何空格的情况下产生。

@yield 语句编译为echo $__env-&gt;yieldContent 调用(BladeCompiler.php,compileYield 方法)。 $_env 这里是\Illuminate\View\Factory 的一个实例。所以你可以使用{{trim(View::yieldContent('description'))}},其中 View 是一个门面。

【讨论】:

  • 我找到的唯一完美答案。
【解决方案2】:

从 Laravel 5 开始,我最喜欢的解决方案是:

@section('description', 'this is the contact page')

【讨论】:

  • 对 5 人超级有帮助!谢谢
【解决方案3】:

我很确定 @yield@section 不是用作变量,而是根据每个派生页面的需要替换部分内容。

要实现这一点,您应该将参数从 controller 传递给刀片 view,例如:

<meta name="description" content="{{ $page_description }}">

或考虑替换该页面的整个元标记,即:

layout.blade.php

<meta name="title" content="This is my page title for all pages">
@yield("additional_meta_tags")

contact.blade.php(或其他页面)

@section("additional_meta_tags")
    <meta name="description" content="this is the contact page">
@stop

【讨论】:

  • 好吧,这不是理想的解决方案,但我会接受。因为将关键字、描述、正文 ID 的值...全部通过控制器传递给视图并不是一个好主意。我宁愿选择第二种选择,因为即使代码多一点,它也能正常工作。
  • 将一组值从控制器传递到视图是个好主意,也是您可以实现的唯一好主意。仅凭事物的逻辑,其他任何事情都不好。我真的看不出一个完整的块比一个简单的数组更容易处理变量,你可以使用任何你喜欢的方式。 +1 为有效答案。
  • @Kypros:您能否检查Pavel's 的答案并指出是否有任何问题。我发现他的回答完美解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 2021-10-15
相关资源
最近更新 更多