为什么laravel blade @yield添加一个新行(换行符)

Ama*_*nut 8 php template-engine laravel blade

我使用的是blade templatinglaravel 4.2

我对使用该@yield功能的功能有一点问题@section.

让我们说在我的布局模板中,layout.blade.php我有以下声明:

<meta name="description" content="@yield('description')">
Run Code Online (Sandbox Code Playgroud)

并且在contact.blade.php其中layout.blade.php我有这个:

@section('description')
    this is the contact page
@stop
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

<meta name="description" content="this is the contact page
">
Run Code Online (Sandbox Code Playgroud)

问题是line break在部分渲染结束时自动添加.

你知道如何避免这种不必要的行为吗?

小智 14

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

@section('description', 'this is the contact page')
Run Code Online (Sandbox Code Playgroud)


Pav*_*l L 11

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

说明.

我有同样的问题.我在页面上有一些模态窗口,它有一个共同的布局,但不同的主体,标题和"id"属性.因此,应该在没有任何空格的情况下产生"id"属性.

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

  • 我找到的唯一完美答案. (2认同)

Kyp*_*ros 4

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

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

<meta name="description" content="{{ $page_description }}">
Run Code Online (Sandbox Code Playgroud)

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

布局.blade.php

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

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

@section("additional_meta_tags")
    <meta name="description" content="this is the contact page">
@stop
Run Code Online (Sandbox Code Playgroud)

  • 将值数组从控制器传递到视图**是一个好主意**,也是您可以实现的唯一好主意。仅仅从事物的逻辑来看,其他任何事情都不好。我真的不明白整个块如何比您可以以任何您喜欢的方式使用的简单数组更容易处理变量。有效答案+1。 (2认同)