Laravel屈服属性

时间:2017-02-12 21:22:57

标签: laravel laravel-5.4 laravel-views

我正在尝试使用 @yield @section 设置属性,但是如何? 我试着用

<html @yield('mainApp')>

@section('mainApp','id="myid"')

但它返回 id =&amp; quot; myid&amp; quot; 而不是 id =“myid”

我知道我可以使用默认的 id 进行管理,但我不喜欢这种方式,如果我需要使用自定义属性,该怎么办?

17 个答案:

答案 0 :(得分:13)

Laravel默认会转义HTML。因此,我看到你有两个选择。

  1. 将值作为控制器中的变量公开给视图。

    view()->share('mainApp', sprintf('id="%s"', 'myid'));

  2. 然后输出未转义的值。

    <html {!! $mainApp !!}
    
    1. 仅产生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标签中的

添加:

<html @yield('mainApp')>

并在您的模板中:

@section('mainApp', "id=myid") // this will give you <html id="myid">

enter image description here

答案 15 :(得分:0)

我刚刚在laravel 5.4中对它进行了测试,对我有用的是:

这是我的布局

MATERNO.x

这在我的扩展视图中(删除了包含myid的引号)

<html lang="en" @yield('mainApp')> 

结果在附图中

enter image description here

答案 16 :(得分:-1)

让我告诉你一行。

开始部分名称应为yield(&#39;部分名称&#39;)