Подтвердить что ты не робот

Атрибут урока Laravel

Я пытаюсь установить атрибут с помощью @yield и @section, но как? Я попытался использовать

<html @yield('mainApp')>

и

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

но возвращает id = "myid" вместо id = "myid"

Я знаю, что могу управлять им с помощью идентификатора по умолчанию, но мне это не нравится, а также что, если мне нужно использовать настраиваемый атрибут?

4b9b3361

Ответ 1

Laravel вытесняет HTML по умолчанию. Поэтому я вижу, что у вас есть два варианта.

  • Экспортируйте значение в представление как переменную в вашем контроллере.

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

Затем выведите значение unescaped.

<html {!! $mainApp !!}
  1. Введите только значение атрибута id, а не весь атрибут.

    @section('mainApp') myid @stop

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

Ответ 2

На вашем контроллере вы делаете что-то вроде:

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

а на вашем представлении/макете вы сделаете что-то вроде:

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

Вам не нужно уступать за такую ​​задачу.

Ответ 3

Если вы проверите Руководство по обновлению по приведенной ниже ссылке, вы увидите несколько строк ниже под Blade: https://laravel.com/docs/5.4/upgrade

    @section Escaping

В Laravel 5.4 встроенное содержимое, переданное в раздел, автоматически экранируется:

    @section('title', $content)

Если вы хотите отобразить неэксклюзивный контент в разделе, вы должны объявить раздел, используя традиционный стиль "длинной формы":

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

Итак, получим результат для вашего запроса, который вам нужен, как показано ниже:

    @section('mainApp', {!! 'id="myid"' !!})

Ответ 4

Почему бы вам не использовать вот так:

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

Это не ускользнет от символа.

Ответ 5

Какую версию Laravel вы используете? В Laravel 5.4 есть обновление об этом:

Лезвие

@section Escaping

В Laravel 5.4 встроенное содержимое, переданное в раздел, автоматически спасся:

@section ('title', $content)

Если вы хотите рендерить unescaped контента в разделе, вы должны объявить раздел, используя традиционный стиль "длинной формы":

@section ( 'название')     {!! $content!!} @stop

https://laravel.com/docs/5.4/upgrade

Длинный рассказ, попробуйте использовать Laravel 5.4, а затем используйте этот код

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

Ответ 6

Итак, лучший способ сделать это, если я понимаю вас, использует @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

Возможно, что-то вроде этого поможет:

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

Сказав это, используя laravel 5.4, ваш способ отлично работает для меня.. какую версию вы используете?

Ответ 8

если используется Laravel 5.4, встроенный контент, переданный в раздел, автоматически экранируется.

затем удалите автоматически экранированный в разделе для использования

@section('mainApp', {!! 'id="myid"' !!})

Ответ 9

Содержимое раздела по умолчанию экранируется с помощью помощника e(). Начиная с Laravel 5.1 вы можете использовать Illuminate\Support\HtmlString, это содержимое html этого класса, которое оно не экранировалось, а непосредственно отображалось вспомогательной функцией Laravel e(), то есть:

@section('mainApp', new Illuminate\Support\HtmlString('id="myid"'))

Ответ 10

Я только что протестировал его в laravel 5.4, и что для меня работает:

Это в моем макете

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

И это в моем расширенном виде (удаленные кавычки, завершающие myid)

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

Результат приведен в прикрепленном изображении

введите описание изображения здесь

Ответ 11

Вот как я это делаю в 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

Ответ 12

Определите свой макет с помощью @yield

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

Расширьте этот мастер

@extends('layouts.app')

Начало раздела привет

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

Результат следующего выглядит следующим образом: id = "myId" - динамическая часть.

<html id="myId" lang="en">

Ответ 13

Я не уверен, как вы назначаете значение myId, но если это всего лишь переменная PHP, попробовали ли вы передать ее частичным таким образом?

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

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

Вы должны иметь возможность передавать любые переменные из одного шаблона в другой и сопоставлять их с разными именами переменных, используя ассоциативный массив пар ключ = > значение

Ответ 14

Существует класс 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);
}

Если вам нужна помощь в создании настраиваемого помощника, ознакомьтесь с этим ответом fooobar.com/questions/27288/...

Ответ 15

Я не пробовал, но, возможно, вы могли бы сделать что-то вроде этого:

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

Если я прав, View::getSections() возвращает все определенные разделы.

Однако я не знаю, будет ли это работать, потому что, возможно, getSections будет вызван до того, как будет определен раздел. Но это все равно стоит сделать.

Ответ 16

Если вы хотите достичь <html id="myid">, вы можете сделать это следующим образом:

в тэге html добавьте это:

<html @yield('mainApp')>

и в вашем шаблоне:

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

введите описание изображения здесь

Ответ 17

Позвольте мне рассказать вам в одной строке.

Имя начального раздела должно быть урожаем ( "Название раздела" )