Представления в Laravel

В статье "Контроллеры в Laravel" мы обсудили способ вывода информации через контроллеры.Но в реальных проектах это редко используется. Обычно контроллеры не формируют HTML. Этим занимаются представления, которые сейчас и обсудим.

Представление - это файл с 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 необходимо указывать их, разделяя точкой.
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: