вопросы пишите мне в телеграмм +375298176892
можно скачать офлайн версию сайта: code.mu old.code.mu

Добавляем представление

Как вы уже знаете, в окно браузера выводится то, что вернет действие через return:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show() { return '!!!'; // на экран выведется '!!!' } }

В реальной жизни, однако, контроллеры не возвращают какие-то данные непосредственно, а передают их в представление (представление = view, буква V из MVC).

Представление получает какие-то данные из контроллера, форматирует их HTML тегами и уже после этого все выводится на экран.

Представление представляет собой файл с HTML кодом. При этом обычно каждому действию контроллера соответствует свой файл.

Для того, чтобы получить представление, используется функция view. Эта функция параметром принимает название файла представления и возвращает его текст.

Файлы представления хранятся в папке resources/views. Давайте перейдем в эту папку и сделаем в ней файл test.blade.php с таким текстом:

<!DOCTYPE html> <html> <head> <title>My view</title> </head> <body> My view </body> </html>

Как вы видите, наш файл test.blade.php имеет два расширения: первое .php и второе .blade. Второе расширение показывает Laravel то, что мы в нашем файле можем использовать команды шаблонизатора Blade. Пока мы просто написали HTML код без команд шаблонизатора, но скоро их добавим.

Давайте сделаем так, чтобы наше действие вернуло текст созданного нами представления. Для этого вместо return '!!!' нужно написать return view('test'):

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show() { return view('test'); } }

Как вы видите, в функцию view нужно передавать только имя файла, без расширений.

Проясню еще один момент. Выше было сказано, что контроллер передает какие-то данные в представление, а это представление оформляет данные нужным HTML кодом. Пока наш контроллер не передал никаких данных, а просто попросил представление вывести свой HTML код - так тоже бывает. Передачей данных мы займемся чуть ниже.

Сделайте представление для какого-нибудь действия одного из ваших контроллеров.

Передача данных в представление

Давайте теперь будем передавать какие-нибудь данные из контроллера в представление.

Для этого предназначен второй параметр функции view. В этот параметр мы можем передать какой-нибудь ассоциативный массив, например, вот так:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show() { return view('test', ['var1' => '1', 'var2' => '2']); } }

Передача данных осуществляется так: все ключи переданного массива станут переменными, доступными в представлении.

То есть у нас в представлении будет доступна переменная $var1 со значением 1 и переменная $var2 со значением 2.

Для того, чтобы вывести содержимое наших переменных в представлении, нужно воспользоваться командами шаблонизатора Blade. Для вывода переменной следует написать следующую команду: {{ имя переменной }}.

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

<!DOCTYPE html> <html> <head> <title>My view</title> </head> <body> Первая переменная: {{ $var1 }} Вторая переменная: {{ $var2 }} </body> </html>

Шаблонизатор Blade вместо соответствующих команд подставит значения переменных и в браузер отправится следующий HTML код:

<!DOCTYPE html> <html> <head> <title>My view</title> </head> <body> Первая переменная: 1 Вторая переменная: 2 </body> </html>

Пусть в действии контроллера даны переменные $name (имя), $surname (фамилия). Передайте значения этих переменных в представление и выведите содержимое каждой из этих переменных на экран.

Подпапки

Сейчас файл test.blade.php с нашим представлением хранится непосредственно в папке resources/views.

Часто, однако, принята следующая практика: каждый контроллер в папке resources/views имеет свою подпапку, а в этой подпапке размещаются файлы представлений для действий.

Например: наш контроллер имеет название TestController, а наше действие - show. Это значит, что внутри папки resources/views нужно создать папку test (имя контроллера без слова controller), а в ней файл show.blade.php, соответствующий нашему действию.

Ну и все остальные действия нашего контроллера должны хранить свои представления в этой же папке test.

Имя представления, которое мы передаем параметром функции view, теперь должно содержать две части: имя папки test и имя файла show. Эти части разделяются точкой, вот так: view('test.show').

На самом деле уровень вложенности папок может быть любым, главное в функции view укажите путь по папкам, разделяя их имена точками.

Перенесите ваше представление в соответствующую папку.