Представления в 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мотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб