Представления, View - это конечная точка запроса пользователя (см. MVC и HMVC). Вместе с тем, представления - это цель запроса: пользователь, нажимая на кнопку ожидает что-то, увидеть представление.
Ответственность за формирование ответа в Laravel берет на себя шаблонизатор blade, который встроен в Laravel по-умолчанию.
Шаблоны создаются в папке app/views и имеют расширение blade.php. Шаблоны подключаются в экшне через хелпер view(), входящим параметром в который передается имя шаблона без расширения blade.php.
Сперва создадим в папке view папку layouts для хранения базовых шаблонов. В папке layouts создадим файл defaults.blade.php. Данный файл содержит html-код шаблона приложения. Меняющуюся часть помещаем в диррективу @yield
начало html-кода неизменной части приложения @yield('content') окончание html-кода неизменной части приложения
Меняющуюся часть шаблона вынесем в отдельный файл index.blade.php.
@extends('layouts.default') @section('content') html-код меняющейся части приложения @stop
Обратите внимание на @extends в начале шаблона. Данная дирректива определяет файл базового шаблона.
Подключение подшаблона index.blade.php осуществляется в экшне контроллера.
namespace App\Http\Controllers; use Illuminate\Http\Request; class BaseController extends Controller { public function index(){ return view('index'); } }
Существует несколько способов передачи переменных из экшна в подшаблон. Рассмотрим их. Передадим переменные $url и $title:
public function index($url){ return view('index', ['url' => $url, 'title'=>'Добро пожаловать на сайт']); }
public function index($url){ return view('index')->with('url', $url)->with('title', 'Добро пожаловать на сайт'); }
public function index($url){ return view('index')->withUrl('url')->withTitle('title'); }
public function index($url){ $title = 'Добро пожаловать на сайт'; return view('index', compact('url', 'title')); ); }
Наилучший способ - compact(), т.к. он содержит меньше кода.
Диррективы Blade
@ функции, циклы
{{ }} вывод переменной не содержащей html
{!! !!} вывод переменной содержащей html-код