27

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

<html @yield('mainApp')>

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

但它返回id="myid"; 而不是id="myid"

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

4

17 回答 17

16

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

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

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

然后输出未转义的值。

<html {!! $mainApp !!}
  1. 只产生id属性值,而不是整个属性。

    @section('mainApp') myid @stop

    <html id="@yield('mainApp', '')">

于 2017-02-12T22:24:39.813 回答
9

在您的控制器上,您可以执行以下操作:

return view('my_page')->with('myid', 'myid');

在您的视图/布局上,您可以执行以下操作:

<html {{ $myid or '' }}>
...

你不需要为这样的任务屈服。

于 2017-02-17T19:05:36.957 回答
8

如果您从下面的链接查看升级指南,您将在 Blade 下看到以下几行: https ://laravel.com/docs/5.4/upgrade

    @section Escaping

在 Laravel 5.4 中,传递给部分的内联内容会自动转义:

    @section('title', $content)

如果您想在一个部分中呈现未转义的内容,则必须使用传统的“长格式”样式声明该部分:

    @section('title')
        {!! $content !!}
    @stop

因此,您需要为您的查询获取结果,如下所示:

    @section('mainApp', {!! 'id="myid"' !!})
于 2017-07-05T12:59:47.813 回答
5

你使用的是哪个 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
于 2017-02-24T09:56:11.770 回答
4

你为什么不这样使用:

@section('mainApp') id='myid' @endsection

这不会逃避角色。

于 2017-02-22T15:15:06.543 回答
3

所以如果我理解你的话,一个更好的方法是使用@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 所在的位置

于 2017-02-17T13:52:14.093 回答
2

使用帮助程序对部分默认内容进行转义e()。从 Laravel 5.1 开始你可以使用Illuminate\Support\HtmlString,这个类的html内容没有被转义,而是由 Laravel辅助函数直接渲染e(),即:

@section('mainApp', new Illuminate\Support\HtmlString('id="myid"'))
于 2017-04-24T07:29:48.743 回答
2

如果使用 Laravel 5.4,传递给部分的内联内容会自动转义。

然后删除自动转义的部分以供使用

@section('mainApp', {!! 'id="myid"' !!})
于 2017-04-21T07:43:19.400 回答
2

也许这样的事情会有所帮助:

{!! $__env->yieldContent('mainApp') !!}

也就是说,使用 laravel 5.4,你的方式对我来说很好......你使用的是哪个版本?

于 2017-02-18T15:45:39.060 回答
1

如果你想实现<html id="myid">,你可以这样做:

在您的 html 标记中添加以下内容:

<html @yield('mainApp')>

并在您的模板中:

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

在此处输入图像描述

于 2017-04-20T17:16:56.217 回答
0

我不确定您是如何分配的值,myId但如果它只是一个 PHP 变量,您是否尝试过像这样将它传递给您的局部变量?

@yield('mainApp', [
    'id' => $myid
])

@section('mainApp', [
    'id' => $myid
])

您应该能够将任何变量从一个模板传递到另一个模板,并使用键 => 值对的关联数组将它们映射到不同的变量名称

于 2017-02-21T13:13:50.167 回答
0

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

这是我的布局

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

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

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

结果在附图中

在此处输入图像描述

于 2017-02-16T15:12:31.373 回答
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
于 2017-02-17T17:12:53.683 回答
0

我还没有尝试过,但也许你可以做这样的事情:

<html {!! View::getSections()['mainApp'] !!}>

如果我是对的,View::getSections()返回所有定义的部分。

但是,我不知道它是否会起作用,因为可能会在定义部分之前调用 getSections。但这仍然值得一试。

于 2017-04-19T18:31:54.917 回答
0

使用@yield 定义您的主布局

<html lang="{{ config('app.locale') }}" @yield('hello')>

扩展那个主

@extends('layouts.app')

开始部分你好

@section('hello') 
   id="myId"
@endsection

以下的输出是这样的,这里 id="myId" 是动态部分。

<html id="myId" lang="en">
于 2017-02-20T12:32:07.917 回答
0

有一个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

于 2017-04-19T18:00:33.980 回答
-1

让我用一句话告诉你。

开始部分名称应为 yield('Section Name')

于 2017-04-26T11:40:26.477 回答