我正在尝试使用 @yield 和 @section 设置属性,但是如何? 我试着用
<html @yield('mainApp')>
和
@section('mainApp','id="myid"')
但它返回 id =&amp; quot; myid&amp; quot; 而不是 id =“myid”
我知道我可以使用默认的 id 进行管理,但我不喜欢这种方式,如果我需要使用自定义属性,该怎么办?
答案 0 :(得分:13)
Laravel默认会转义HTML。因此,我看到你有两个选择。
将值作为控制器中的变量公开给视图。
view()->share('mainApp', sprintf('id="%s"', 'myid'));
然后输出未转义的值。
<html {!! $mainApp !!}
仅产生id
属性值,而不是整个属性。
@section('mainApp')
myid
@stop
<html id="@yield('mainApp', '')">
答案 1 :(得分:7)
如果您从下面的链接中查看升级指南,您会看到Blade下面的几行: https://laravel.com/docs/5.4/upgrade
@section Escaping
在Laravel 5.4中,传递给某个部分的内联内容会自动转义:
@section('title', $content)
如果您想在一个部分中呈现未转义的内容,您必须使用传统的“长格式”样式声明该部分:
@section('title')
{!! $content !!}
@stop
因此,您需要按以下方式获取查询结果:
@section('mainApp', {!! 'id="myid"' !!})
答案 2 :(得分:7)
在您的控制器上执行以下操作:
return view('my_page')->with('myid', 'myid');
并在您的视图/布局上执行以下操作:
<html {{ $myid or '' }}>
...
你不需要屈服于这样的任务。
答案 3 :(得分:4)
为什么不这样使用:
@section('mainApp') id='myid' @endsection
这不会逃避角色。
答案 4 :(得分:3)
您使用的是哪种Laravel版本?在Laravel 5.4中,有关于此的更新:
刀片
@section Escaping
在Laravel 5.4中,自动传递给某个部分的内联内容 转义:
@section(&#39; title&#39;,$ content)
如果你想渲染未转义 在一个部分中的内容,您必须使用该部分声明该部分 传统&#34;长形式&#34;式:
@section(&#39;标题&#39;) {! $ content !!} @stop
https://laravel.com/docs/5.4/upgrade
长短篇小说,尝试使用 Laravel 5.4 ,然后使用此代码
@section('mainApp')
id="myid"
@stop
答案 5 :(得分:2)
也许这样的事情会有所帮助:
{!! $__env->yieldContent('mainApp') !!}
那就是说,使用laravel 5.4,你的方式适合我..你使用哪个版本?
答案 6 :(得分:2)
如果我了解你,那么更好的方法就是使用@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
的位置答案 7 :(得分:2)
如果使用Laravel 5.4,传递给某个部分的内联内容会自动转义。
然后删除自动转义的部分用于使用
@section('mainApp', {!! 'id="myid"' !!})
答案 8 :(得分:2)
使用e()
帮助程序转义部分默认内容。从Laravel 5.1开始,您可以使用Illuminate\Support\HtmlString
,此类 html 内容未转义但直接呈现由Laravel {{1}辅助函数,即:
e()
答案 9 :(得分:0)
这就是我在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
答案 10 :(得分:0)
使用@yield
定义主布局<html lang="{{ config('app.locale') }}" @yield('hello')>
扩展该主人
@extends('layouts.app')
开始部分hello
@section('hello')
id="myId"
@endsection
以下输出就像这样id =“myId”是动态部分。
<html id="myId" lang="en">
答案 11 :(得分:0)
我不确定你是如何分配myId
的值的,但如果它只是一个PHP变量,你是否尝试将它传递给你的部分?
@yield('mainApp', [
'id' => $myid
])
@section('mainApp', [
'id' => $myid
])
您应该能够将任何变量从一个模板传递到另一个模板,并使用关键数组key =&gt;将它们映射到不同的变量名称。价值对
答案 12 :(得分:0)
您可以使用HtmlString
类进行此类操作,Laravel将其用于csrf_field()
和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
答案 13 :(得分:0)
我还没试过,但也许你可以这样做:
<html {!! View::getSections()['mainApp'] !!}>
如果我是对的,View::getSections()
将返回所有已定义的部分。
但是,我不知道它是否会起作用,因为在定义部分之前可能会调用getSections。但它仍然值得一试。
答案 14 :(得分:0)
如果你想达到<html id="myid">
,你可以这样做:
添加:
<html @yield('mainApp')>
并在您的模板中:
@section('mainApp', "id=myid") // this will give you <html id="myid">
答案 15 :(得分:0)
我刚刚在laravel 5.4中对它进行了测试,对我有用的是:
这是我的布局
MATERNO.x
这在我的扩展视图中(删除了包含myid的引号)
<html lang="en" @yield('mainApp')>
结果在附图中
答案 16 :(得分:-1)
让我告诉你一行。
开始部分名称应为yield(&#39;部分名称&#39;)