Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 01.09.2018 08:10:19

Как передать переменную в yield

Здравствуйте. Имеется примерно такой код

return view('child', compact($items));

// Родительский файл master
@foreach($items as $item)
    // код
    @yield('content')
    // код
@endforeach

// Дочерний файл child
@extends('master')
@section('content')
    {{ $item->id }}
@endsection

Родительский файл для нескольких страниц одинаковый, а вот дочерний меняется. При таком варианте получаю ошибку что $item не определена. Как можно по другому решить эту проблему?

Не в сети

#2 01.09.2018 09:31:58

Re: Как передать переменную в yield

Наверное $items а не $item не определена в master. Передать параметр в лейаут шаблон можно так:

@extends('master', ['items' => $items])

или можно сделать $items какбы глобальным в шаблонах:

View::share('items', $items);
return view('child');

https://stackoverflow.com/q/16118104/272885


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 01.09.2018 10:59:06

Re: Как передать переменную в yield

Не, именно $item.
Дело в том, что $items получается из отношения. И перебор этого массива идет именно в родительском шаблоне. А каждый элемент мне нужен с дочернем. И ошибка идет от дочернего файла. Поэтому $items я так передать не могу.

Не в сети

#4 02.09.2018 07:23:33

Re: Как передать переменную в yield

Ага, сейчас понятно. Думаю так не получится. Yield не получает скоуп "родителя" и в него нельзя передать параметр.
Можно использовать @include с параметром. Либо получать $item через вью композер. И то и другое потребует больших переделок. Sorry sad


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 02.09.2018 13:03:51

Re: Как передать переменную в yield

Ну инклуд тоже не лучший вариант. Придется делать иф, а потом еще и еще. Хотя я пока так и сделал. Странно что данный вариант не предусмотрен, неужели никого раньше данная проблема не интересовала... Спасибо за помощь.

Не в сети

Подвал раздела