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

时间:2014-10-28 17:42:02

标签: php laravel template-engine blade

我正在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

您是否知道如何避免这种不受欢迎的行为?

3 个答案:

答案 0 :(得分:11)

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

解释。

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

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

答案 1 :(得分:11)

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

// Creating a data task
NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession]
  dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
  // Use the data here
}];

// Starting the task
[dataTask resume];

答案 2 :(得分: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