Представление - это файл с HTML кодом, который является шаблоном, куда вставляются данные, подготовленные контроллером. Представления хранятся в папке /resources/views и имеют сложные названия, содержащие два расширения. Вот название файла представления:
mouse.blade.php
Расширение PHP говорит веб серверу о том, что при обращении к файлу нужно обработать файл PHP компилятором. расширение "blade" говорит Laravel о том, что необходимо использовать шаблонизатор под названием Blade. И только часть до первой точки "mouse" - это название файла, которые мы придумали сами.Рассмотрим типичное содержание файла представления (в нашем случае это будет /resources/views/mouse.blade.php:
<!DOCTYPE html>
<html>
<head>
<title>Представление</title>
</head>
<body>
Содержание страницы
</body>
</html>
Теперь осталось вызвать это представление из контроллера. Для этого необходимо использовать функцию "view", которая аргументом принимает название файла без расширений (т.е. без ".blade.php"):
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MouseController extends Controller{
public function show() {
return view('mouse');
}
}
?>
В этом примере мы только вызвали представление, но не передали ему никаких переменных, что возможно сделать.
Передача данных в представление
Попробуем передать данные из контроллера в представление. Чтобы сделать это, необходимо использовать второй параметр функции "view", в который записывается массив. Ключи этого массива должны быть текстом, они станут переменными внутри представления. К примеру, если был ключ 'text', то значение по этому ключу станет доступно в переменной $text. Попробуем написать подобный пример:<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MouseController extends Controller{
public function show() {
$params = array(
'title' => 'Стишок',
'var1' => 'Тише, мыши, кот на крыше.',
'var2' => 'А котята ещё выше!',
);
return view('mouse', $params);
}
}
?>
После передачи данных в представление необходимо сделать вывод их значений. Осуществляется он с помощью двойных фигурных скобок. То есть в нашем случае получится так:
<!DOCTYPE html>
<html>
<head>
<title>{{ $title }}</title>
</head>
<body>
{{ $var1 }}<br>
{{ $var2 }}
</body>
</html>
Таким образом после срабатывания контроллера мы увидим страницу со следующим содержанием:
<!DOCTYPE html>
<html>
<head>
<title>Стишок</title>
</head>
<body>
Тише, мыши, кот на крыше.<br>
А котята ещё выше!
</body>
</html>
Организация папок
Обычно в больших существуют десятки контроллеров и представлений. Чтобы не было бардака, их организуют в папки внутри /resources/views. Причём так, чтобы название вложенных папок соответствовало названиям контроллеров. К примеру, есть у нас контроллер MouseController. Удаляем часть "Controller" и приводим к нижнему регистру, получается просто mouse. Теперь создаём папку /resources/views/mouse и кладём в неё файл представления, который имеет название равное названию действия show.blade.php. Получится такой путь:/resources/views/mouse/show.blade.php
Теперь в аргументе функции view можно написать путь, заменив слеш на точку, чтобы получилось "mouse.main". Laravel умеет понимать подобные пути при вызове представления:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MouseController extends Controller{
public function show() {
return view('mouse.show');
}
}
?>
Пути к файлам могут быть любыми. Но в параметре функции view необходимо указывать их, разделяя точкой.