【问题标题】:Laravel Blade @yield and escapingLaravel Blade @yield 和转义
【发布时间】:2016-02-27 07:33:01
【问题描述】:

在 Laravel 5 中,我有一个主模板,其中包含:

<title>@yield('title') | Site Name</title>

在我看来,我有:

@extends('master')

@section('title', $client->name)

...

问题是,@yield 不会转义传递给它的数据。到目前为止,我发现的唯一解决方案是像这样手动转义数据:

@section('title', e($client->name))

这是最好的方法吗?这意味着我必须在使用变量的每个视图上手动转义数据。我看不到从主模板中转义 @yield 指令的方法 - 在 @yield 周围使用 {{ }}e() 不起作用。

【问题讨论】:

  • 我没有意识到@​yield-ed 值没有被转义。感谢您指出这一点!

标签: php laravel blade yield


【解决方案1】:

为什么不做以下事情:

@section('title') {{$client->name}} @endsection

这至少与在您的其余视图中转义数据一致。按照您的方式,您很可能会错过e()。有了上面,你在渲染视图的时候,如果没有转义,就可以立即看到。

更新

如何使用原始 PHP:

<title> <?php echo e($__env->yieldContent('title')); ?> | Site Name</title>

这是刀片模板引擎替换 @yield 的内容,但我添加了转义助手。

这应该意味着您不需要转义@section。我认为这会起作用,还没有尝试过。

【讨论】:

  • 这会得到我的投票。 @DisgruntledGoat 有理由不这样做吗?
【解决方案2】:

@section('title')
 {{ $client->name }}
@stop

【讨论】:

  • Laravel 5 还支持@stop 吗?我的印象是他们删除了它。
  • 我认为 \@endsection 在技术上是正确的做法,但我的 L5 应用程序中的 \@stop 没有任何问题。
【解决方案3】:

在我的情况下,问题在于它实际上已经转义了我传递的字符串,如下所示:

@section('title', 'String with \' string')

在实际的 HTML 中,您将看到 &amp;#039; 而不是实际的 '

解决方法是编写如下部分:

@section('title'){!! "String with ' string" !!}@endsection

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2021-07-06
    • 2017-05-16
    • 1970-01-01
    • 2015-06-08
    • 2021-03-29
    相关资源
    最近更新 更多