我正在使用blade templating
和laravel 4.2
我对@yield
函数有一点问题,它与@section
函数一起使用。
让我们说我的布局模板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
。
你知道如何避免这种不必要的行为吗?
我非常肯定@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
从Laravel 5开始,我最喜欢的解决方案是:
@section('description', 'this is the contact page')
你可以使用{{trim(View::yieldContent('description'))}}
我有同样的问题。我在页面上有一些模态窗口,它有一个共同的布局,但不同的主体,标题和“id”属性。因此,应该在没有任何空格的情况下产生“id”属性。
@yield
语句编译为echo $__env->yieldContent
调用(BladeCompiler.php,compileYield方法)。 $_env
这里是\Illuminate\View\Factory
的一个例子。所以你可以使用{{trim(View::yieldContent('description'))}}
,其中View是一个立面。