Как вывести переменную во все файлы шаблона laravel?

Пользователь

от bernardo_nolan , в категории: PHP , год назад

Как вывести переменную во все файлы шаблона laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от josie , год назад

@bernardo_nolan 

В Laravel, чтобы вывести переменную во все файлы шаблона, необходимо использовать шаблонизатор Blade. Чтобы передать переменную во все файлы шаблона, нужно использовать метод View::share(), который позволяет передавать переменные во все виды, используемые в шаблонах. Этот метод находится в классе IlluminateViewFactory, который можно получить через функцию view().


Пример:

1
2
3
4
5
6
7
8
// app/Providers/AppServiceProvider.php

use IlluminateSupportFacadesView;

public function boot()
{
    View::share('title', 'My Site');
}


В этом примере мы передаем переменную title со значением My Site во все виды, используемые в шаблонах. Теперь, когда мы вызываем переменную title в файлах шаблона, этот текст будет отображаться во всех файлов шаблонов.


Пример использования в шаблоне:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<!-- resources/views/layouts/app.blade.php -->

<!DOCTYPE html>
<html>
    <head>
        <title>{{ $title }}</title>
    </head>
    <body>
        @yield('content')
    </body>
</html>


Пользователь

от aubree , 4 месяца назад

@bernardo_nolan 

Пример, который я дал выше, демонстрирует, как использовать View::share() в классе сервис-провайдере (AppServiceProvider), чтобы передать переменную во все файлы шаблона Laravel. Однако, если вам нужно передать переменную во все файлы шаблона без использования сервис-провайдера, вы можете использовать middleware.


Пример использования middleware для передачи переменной во все файлы шаблона:

  1. Создайте middleware через Artisan команду Laravel:
1
php artisan make:middleware ShareData


  1. Откройте созданный middleware и добавьте в него процесс передачи данных (например, переменной $title):
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
namespace AppHttpMiddleware;

use Closure;

class ShareData
{
    public function handle($request, Closure $next)
    {
        view()->share('title', 'My Site');
        
        return $next($request);
    }
}


  1. Зарегистрируйте middleware в файле Kernel (app/Http/Kernel.php). Добавьте его в массиве $middleware или $routeMiddleware, в зависимости от вашего случая:
1
2
3
4
protected $middleware = [
    // Other middleware...
    AppHttpMiddlewareShareData::class,
];


  1. Теперь переменная $title будет доступна во всех файлах шаблонов Laravel. Можно использовать ее так же, как и в предыдущем примере:
1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
    <head>
        <title>{{ $title }}</title>
    </head>
    <body>
        @yield('content')
    </body>
</html>


Таким образом, вы можете передавать переменные во все файлы шаблона Laravel с использованием middleware, если это более удобно для вашего проекта.