РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
46 of 1392 menu

Директива inject

Директива inject позволяет получить экземпляр класса из сервис-контейнера Laravel прямо в шаблоне. Это удобно, когда нужно использовать данные из сервиса без создания отдельного контроллера или view-композера. Первым параметром передаётся имя переменной, в которую будет помещён объект, вторым - имя класса или его привязка в контейнере. Директива разрешается в момент компиляции шаблона.

Синтаксис

@inject($variable, 'service.bind') @inject($variable, App\Services\SomeService::class)

Пример

Давайте получим список статей через сервис и выведем их в шаблоне:

@inject($articleService, App\Services\ArticleService::class) <h1>Article list</h1> <ul> @foreach ($articleService->getAll() as $article) <li>{{ $article->title }}</li> @endforeach </ul>

Результат выполнения кода:

<h1>Article list</h1> <ul> <li>First article</li> <li>Second article</li> <li>Third article</li> </ul>

Пример

Давайте внедрим сервис с привязкой в контейнере. Предположим, что в сервис-провайдере зарегистрирован интерфейс:

<?php use App\Interfaces\DataProviderInterface; use App\Services\DatabaseDataProvider; class AppServiceProvider extends ServiceProvider { public function register(): void { $this->app->bind(DataProviderInterface::class, DatabaseDataProvider::class); } } ?>

А затем используем его в шаблоне:

@inject($dataProvider, App\Interfaces\DataProviderInterface::class) <div class="dashboard"> <h2>Stats</h2> @foreach ($dataProvider->getStats() as $stat) <p>{{ $stat->label }}: {{ $stat->value }}</p> @endforeach </div>

Результат выполнения кода:

<div class="dashboard"> <h2>Stats</h2> <p>Total users: 100</p> <p>Active users: 75</p> <p>New users: 10</p> </div>

Пример

Рассмотрим пример, где в шаблоне внедряется несколько сервисов одновременно:

@inject($userService, App\Services\UserService::class) @inject($settingsService, App\Services\SettingsService::class) <div> @if ($userService->isAdmin()) <a href="/admin">Admin panel</a> @endif @if ($settingsService->get('show_sidebar')) <aside>Sidebar content</aside> @endif </div>

Результат выполнения кода для администратора:

<div> <a href="/admin">Admin panel</a> <aside>Sidebar content</aside> </div>

Смотрите также

  • директива auth,
    которая используется для проверки аутентификации пользователя
  • директива can,
    которая проверяет наличие прав у пользователя
  • директива class,
    которая генерирует CSS-классы в Blade-шаблонах
  • метод composer,
    который позволяет привязать данные к представлению
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить