我正在尝试使用@yield和@section设置属性,但是如何设置?我试着用
<html @yield('mainApp')>
和
@section('mainApp','id="myid"')
但它返回id="myid"; 而不是id="myid"
我知道我可以使用默认id来管理它,但我不喜欢这种方式,如果我需要使用自定义属性怎么办?
我正在尝试使用@yield和@section设置属性,但是如何设置?我试着用
<html @yield('mainApp')>
和
@section('mainApp','id="myid"')
但它返回id="myid"; 而不是id="myid"
我知道我可以使用默认id来管理它,但我不喜欢这种方式,如果我需要使用自定义属性怎么办?
Laravel 默认转义 HTML。因此,我看到您有两个选择。
将值作为控制器中的变量公开给视图。
view()->share('mainApp', sprintf('id="%s"', 'myid'));
然后输出未转义的值。
<html {!! $mainApp !!}
只产生id
属性值,而不是整个属性。
@section('mainApp')
myid
@stop
<html id="@yield('mainApp', '')">
在您的控制器上,您可以执行以下操作:
return view('my_page')->with('myid', 'myid');
在您的视图/布局上,您可以执行以下操作:
<html {{ $myid or '' }}>
...
你不需要为这样的任务屈服。
如果您从下面的链接查看升级指南,您将在 Blade 下看到以下几行: https ://laravel.com/docs/5.4/upgrade
@section Escaping
在 Laravel 5.4 中,传递给部分的内联内容会自动转义:
@section('title', $content)
如果您想在一个部分中呈现未转义的内容,则必须使用传统的“长格式”样式声明该部分:
@section('title')
{!! $content !!}
@stop
因此,您需要为您的查询获取结果,如下所示:
@section('mainApp', {!! 'id="myid"' !!})
你使用的是哪个 Laravel 版本?在 Laravel 5.4 中,有一个关于这个的更新:
刀
@section 转义
在 Laravel 5.4 中,传递给部分的内联内容会自动转义:
@section('标题', $内容)
如果您想在一个部分中呈现未转义的内容,则必须使用传统的“长格式”样式声明该部分:
@section('title') {!! $内容!!} @stop
https://laravel.com/docs/5.4/upgrade
长话短说,尝试使用Laravel 5.4,然后使用此代码
@section('mainApp')
id="myid"
@stop
你为什么不这样使用:
@section('mainApp') id='myid' @endsection
这不会逃避角色。
所以如果我理解你的话,一个更好的方法是使用@stack和@push
<html class="no-js" lang="en" @stack('mainApp')>
以及您想要发送 id 的任何页面都使用 @push
@push('mainApp')
id='myid'
@endpush
https://laravel.com/docs/5.2/blade#stacks
甚至可以在其中添加变量或您喜欢的所有内容,它将转到@stack 所在的位置
使用帮助程序对部分默认内容进行转义e()
。从 Laravel 5.1 开始你可以使用Illuminate\Support\HtmlString
,这个类的html内容没有被转义,而是由 Laravel辅助函数直接渲染e()
,即:
@section('mainApp', new Illuminate\Support\HtmlString('id="myid"'))
如果使用 Laravel 5.4,传递给部分的内联内容会自动转义。
然后删除自动转义的部分以供使用
@section('mainApp', {!! 'id="myid"' !!})
也许这样的事情会有所帮助:
{!! $__env->yieldContent('mainApp') !!}
也就是说,使用 laravel 5.4,你的方式对我来说很好......你使用的是哪个版本?
我不确定您是如何分配的值,myId
但如果它只是一个 PHP 变量,您是否尝试过像这样将它传递给您的局部变量?
@yield('mainApp', [
'id' => $myid
])
@section('mainApp', [
'id' => $myid
])
您应该能够将任何变量从一个模板传递到另一个模板,并使用键 => 值对的关联数组将它们映射到不同的变量名称
这就是我在 Laravel 5.4 中的做法:
HTML 模板 (template.html):
<!DOCTYPE html>
<html id="{{ $html_id or '' }}" lang="{{ $html_locale or 'en' }}">
<head>
...
@yield('head')
...
</head>
<body>
...
@yield('body')
...
</body>
</html>
一个基本模板(template.main)
@component('template.html')
@section('head')
...
@stop
@section('body')
...
@yield('contents')
...
@stop
@endcomponent
一个页面模板将定义 HTML #ID
@extends('template.main')
@slot('html_id')
app-html-id
@endslot
@section('contents')
...
@stop
我还没有尝试过,但也许你可以做这样的事情:
<html {!! View::getSections()['mainApp'] !!}>
如果我是对的,View::getSections()
返回所有定义的部分。
但是,我不知道它是否会起作用,因为可能会在定义部分之前调用 getSections。但这仍然值得一试。
使用@yield 定义您的主布局
<html lang="{{ config('app.locale') }}" @yield('hello')>
扩展那个主
@extends('layouts.app')
开始部分你好
@section('hello')
id="myId"
@endsection
以下的输出是这样的,这里 id="myId" 是动态部分。
<html id="myId" lang="en">
有一个HtmlString
类可以用于此类事情,Laravel 将其用于类似csrf_field()
and之类的事情method_field()
。
如果您愿意,可以内联它:
@section('mainApp', new \Illuminate\Support\HtmlString('id="myid"'))
但是,我会亲自为此创建一个自定义帮助程序,以便我可以更轻松地访问它,即:
@section('mainApp', html_string('id="myid"'))
助手应该看起来像..
function html_string($string) {
return new \Illuminate\Support\HtmlString($string);
}
如果您在创建自定义助手时需要帮助,请查看此答案https://stackoverflow.com/a/28290359/7844646
让我用一句话告诉你。
开始部分名称应为 yield('Section Name')