Атрибут урока Laravel
Я пытаюсь установить атрибут с помощью @yield и @section, но как?
Я попытался использовать
<html @yield('mainApp')>
и
@section('mainApp','id="myid"')
но возвращает id = "myid" вместо id = "myid"
Я знаю, что могу управлять им с помощью идентификатора по умолчанию, но мне это не нравится, а также что, если мне нужно использовать настраиваемый атрибут?
Ответы
Ответ 1
Laravel вытесняет HTML по умолчанию. Поэтому я вижу, что у вас есть два варианта.
-
Экспортируйте значение в представление как переменную в вашем контроллере.
view()->share('mainApp', sprintf('id="%s"', 'myid'));
Затем выведите значение unescaped.
<html {!! $mainApp !!}
-
Введите только значение атрибута 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
Позвольте мне рассказать вам в одной строке.
Имя начального раздела должно быть урожаем ( "Название раздела" )