Метод share
Метод share класса View позволяет сделать данные доступными для всех шаблонов представлений в приложении. Это удобно, когда нужно передать общие данные, например, информацию о текущем пользователе, настройки сайта или глобальные параметры интерфейса, во все виды без дублирования кода. Метод принимает первым параметром имя переменной в виде строки, вторым - её значение, или массив ключ-значение для передачи нескольких переменных сразу.
Синтаксис
<?php
View::share($key, $value);
View::share([$key1 => $value1, $key2 => $value2]);
?>
Пример
Передадим переменную 'siteName' во все шаблоны приложения. Обычно это делается в сервис-провайдере или в методе boot класса AppServiceProvider:
<?php
namespace AppProviders;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::share('siteName', 'My Awesome Site');
}
}
?>
Теперь переменная 'siteName' доступна в любом Blade-шаблоне:
<html>
<head>
<title>{{ $siteName }}</title>
</head>
<body>
<h1>Welcome to {{ $siteName }}</h1>
</body>
</html>
Результат выполнения кода:
<html>
<head>
<title>My Awesome Site</title>
</head>
<body>
<h1>Welcome to My Awesome Site</h1>
</body>
</html>
Пример
Передадим несколько переменных сразу с помощью массива:
<?php
namespace AppProviders;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::share([
'siteName' => 'My Blog',
'year' => 2026,
'isAdmin' => false,
]);
}
}
?>
Теперь все три переменные доступны в любом представлении:
<html>
<body>
<p>Site: {{ $siteName }}</p>
<p>Year: {{ $year }}</p>
<p>Admin: {{ $isAdmin ? 'Yes' : 'No' }}</p>
</body>
</html>
Результат выполнения кода:
<html>
<body>
<p>Site: My Blog</p>
<p>Year: 2026</p>
<p>Admin: No</p>
</body>
</html>
Пример
Передадим данные текущего аутентифицированного пользователя во все представления:
<?php
namespace AppProviders;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Auth;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::share('currentUser', Auth::user());
}
}
?>
Используем переданные данные в шаблоне навигации:
<html>
<body>
<nav>
@if ($currentUser)
<p>Hello, {{ $currentUser->name }}</p>
<a href="/logout">Logout</a>
@else
<a href="/login">Login</a>
@endif
</nav>
@yield('content')
</body>
</html>
Если пользователь аутентифицирован, результатом будет:
<html>
<body>
<nav>
<p>Hello, John Doe</p>
<a href="/logout">Logout</a>
</nav>
main content
</body>
</html>
А если пользователь не аутентифицирован:
<html>
<body>
<nav>
<a href="/login">Login</a>
</nav>
main content
</body>
</html>