Laravel — как передать переменную в родительский шаблон?

В Laravel, передача переменной в родительский шаблон может быть достигнута с помощью двух методов: через наследование и с помощью команды with.

Первый способ - наследование переменной. Для этого в родительском шаблоне нужно определить блок с помощью директивы @section, а затем в дочернем шаблоне использовать этот блок и передать в него переменную.

Пример:

// Родительский шаблон (app.blade.php)
<html>
    <head>
        <title>@yield('title')</title>
    </head>
    <body>
        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

// Дочерний шаблон (child.blade.php)
@extends('app')

@section('title', 'Моя страница')

@section('content')
    <h1>Добро пожаловать!</h1>
    <p>Привет, {{ $name }}!</p>
@endsection

В этом примере переменная $name передается из контроллера в вид путем использования return view('child', ['name' => 'John']);. В дочернем шаблоне она отображается с помощью фигурных скобок {{ $name }}.

Второй способ - использование команды with. Этот метод позволяет передавать переменную в родительский шаблон прямо из контроллера.

Пример:

public function index()
{
    $name = 'John';

    return view('child')->with('name', $name);
}
// Родительский шаблон (app.blade.php) остается без изменений

// Дочерний шаблон (child.blade.php)
@extends('app')

@section('title', 'Моя страница')

@section('content')
    <h1>Добро пожаловать!</h1>
    <p>Привет, {{ $name }}!</p>
@endsection

В этом примере переменная $name передается в дочерний шаблон с помощью метода with. В дочернем шаблоне она отображается так же как и в первом способе.

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