Класс View
Класс View является основным компонентом для работы с представлениями в Laravel. Он предоставляет методы для загрузки Blade-шаблонов, передачи данных в представления и совместного использования переменных между всеми шаблонами. Основной способ получения экземпляра класса - использование глобальной функции view.
Синтаксис
<?php
// Базовый синтаксис
view($path, $data = [], $mergeData = []);
// Пример использования
view('index', ['name' => 'John']);
?>
Параметры
Метод view принимает три параметра:
$path- путь к шаблону относительно директории resources/views (без расширения .blade.php)$data- ассоциативный массив данных, которые будут доступны в представлении$mergeData- дополнительные данные для слияния с основным массивом
Пример с передачей данных
Давайте создадим контроллер, который передает массив данных в представление:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function index()
{
$articles = ['article 1', 'article 2', 'article 3'];
return view('articles.index', ['articles' => $articles]);
}
}
?>
Теперь создадим шаблон, который выведет полученные данные:
<html>
<body>
<h1>Articles list</h1>
<ul>
@foreach ($articles as $article)
<li>{{ $article }}</li>
@endforeach
</ul>
</body>
</html>
Результат выполнения кода:
<html>
<body>
<h1>Articles list</h1>
<ul>
<li>article 1</li>
<li>article 2</li>
<li>article 3</li>
</ul>
</body>
</html>
Метод share - совместное использование данных
Метод share позволяет сделать данные доступными во всех представлениях приложения:
<?php
namespace AppProviders;
use IlluminateSupportServiceProvider;
use IlluminateSupportFacadesView;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::share('siteName', 'My Awesome Site');
}
}
?>
После этого переменная siteName будет доступна в любом шаблоне:
<html>
<body>
<header>
<h1>{{ $siteName }}</h1>
</header>
<main>
@yield('content')
</main>
</body>
</html>
Метод composer - привязка данных к представлению
Метод composer позволяет привязать данные к конкретному представлению или группе представлений:
<?php
namespace AppProviders;
use IlluminateSupportServiceProvider;
use IlluminateSupportFacadesView;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer('profile', function ($view) {
$view->with('user', auth()->user());
});
// Для нескольких представлений
View::composer(['profile', 'dashboard'], function ($view) {
$view->with('notifications', auth()->user()->notifications);
});
}
}
?>
Метод creator - обработчик создания представления
Метод creator аналогичен composer, но вызывается при создании представления, а не при его рендеринге:
<?php
namespace AppProviders;
use IlluminateSupportServiceProvider;
use IlluminateSupportFacadesView;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::creator('settings', function ($view) {
$view->with('settings', config('app.settings'));
});
}
}
?>
Пример с методом exists
Метод exists проверяет, существует ли представление:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesView;
class PageController extends Controller
{
public function show($page)
{
if (View::exists('pages.' . $page)) {
return view('pages.' . $page);
}
return view('errors.404');
}
}
?>