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

问题描述 投票:7回答:3

我正在使用blade templatinglaravel 4.2

我对@yield函数有一点问题,它与@section函数一起使用。

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

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

在扩展contact.blade.phplayout.blade.php我有这个:

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

输出是这样的:

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

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

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

php laravel template-engine blade
3个回答
4
投票

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

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

<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

12
投票

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

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

11
投票

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

说明。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.