LINUX.ORG.RU

Компоненты Laravel 7 & page title

 ,


0

1

В blade Laravel 7 презентован новый синтаксис компонентов, когда внутри view стало возможным писать что-то вроде

<x-mycomponent param1="value" param2="value"/>

Всё круто, но возникает вопрос, на который нигде не могу найти ответ. А можно ли как-то изнутри компонента задать значение переменной в родительском view (в котором прописан тег компонента)? Ну то есть это то, что возможно делать с помощью @yield и @extends.

Поясню. Пусть, например, есть файл layout.blade.php:

<html>
<head>
   <title>@yield('title')</title>
</head>
<body>
    <x-mycomponent param1="value" param2="value"/>
</body>
</html>

И, собственно, шаблон подключаемого компонента:

@section('title', 'Заголовок страницы');

<div>
А здесь какой-то контент компонента
</div>

Я ожидаю, что title будет установлен компонентом, как если бы он наследовал layout через @extends. Но этого не происходит. Как-то можно сделать это с использованием нового синтаксиса компонентов Laravel 7? А то если нет, то это весьма существенное ограничение его использования.



Последнее исправление: Novascriptum (всего исправлений: 1)

А чем этот синтаксис лучше старого @component? А вообще думаю можно самому через Blade, расширив этот класс или viewfactory, перерегистрируя синглетрон. Сам такое делал в ларе 5, когда свой @megacomponent делал. Вообще в ларе можно любой класс расширить под свои нужды

gobot ★★★★
()

А можно ли как-то изнутри компонента задать значение переменной в родительском view

Есть, перейти на twig

alexmaru
()
Ответ на: комментарий от gobot

Речь не просто о расширении класса. Дело в порядке исполнения. Когда дочерний view расширяет родительский через @extend, сначала будет исполнен «код» дочернего шаблона, а потом родительского. Соответственно и спокойно передадутся переменные. Когда идёт подключение через компоненты (хоть через , хоть через @component), то сначала подключается родительский view, а уже внутри него дочерние. И вначале исполняется «код» родительского view. Отсюда и проблема. Она должна решаться какими-то заменами, например. Мой вопрос касается того, предусмотрен ли вообще такой сценарий в Laravel, когда компонент устанавливает/переопределяет какие-то переменные в родительском шаблоне выше по коду. Если нет, то это хреново. И, судя по всему, именно нет, и нужно что-то дописывать/выдумывать своё. Какие-то компоненты в Laravel получились недоделанные. Я просто только начинаю его изучать и пытаюсь осознать возможности системы.

Novascriptum
() автор топика
Ответ на: комментарий от alexmaru

Спасибо за наводку, посмотрю. Но, как я понимаю, это сторонний по отношению к Laravel шаблонизатор. Не хотелось бы сразу отказываться от «родного». Поразбираюсь ещё.

Novascriptum
() автор топика
Ответ на: комментарий от alexmaru

Слышал звон не знаешь откуда он

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.