Может войдёшь?
Черновики Написать статью Профиль

Основы Laravel 5: Blade 101

перевод Основы Laravel 5 Laracasts

Это перевод видео-урока с Laracasts, серия Laravel 5 Fundamentals, урок №5Passing Data to Views от . Перевод обновлён . Опечатка? Выдели и нажми Ctrl+Enter.

(0:00)
Теперь, когда вы узнали, как передавать переменные в вид, давайте пойдём дальше и поговорим чуть побольше о Blade. Если я верну боковую панель, надеюсь вы помните как в последнем уроке я говорил, что если постоянно копировать большие куски HTML в каждый вид, то всё очень быстро сломается. Вместо этого мы должны выделять такие куски в отдельные шаблоны. Итак, вот, что мы можем сделать. В моей директории /views, я создам новый мастер-файл или файл-шаблон, как вам удобно его называть.

(0:30)
Давайте просто остановимся на имени app.blade.php. ОК, так вот, здесь у нас будет весь наш обёртывающий HTML-код, так сказать. И потом я буду здесь использовать Blade — выведем раздел content:

PHP
@yield('content')

Обратите внимание насколько хорошо это читается. Вот наш HTML-код, и между этими двумя тегами я и хочу вывести («yield») моё содержимое. Или, выражаясь более точно, возможно у вас есть какой-то div-контейнер в формате Bootstrap.

(1:00)
ОК, теперь мы объявим все эти вещи один раз, и затем все ваши виды просто создадут небольшие разделы, которые будут автоматически вставлены вот здесь. Вот как. В нашем файле About, я могу сейчас удалить весь этот мусор, и вместо этого, я собираюсь расширить мою мастер-страницу app:

PHP
@extends('app')

Хорошо. Но теперь, как мне указать где находится мой раздел? Хорошо мы используем вот этот ключ: @section() и затем мы станем ссылаться на имя (мы назвали его content):

PHP
@section('content')

(1:30)
Итак, давайте посмотрим, сработает ли это. И знаете что, я избавлюсь от этой переменной, что мы удалили. Так что если мы переключимся обратно в Chrome, обновим, и готово. Но теперь мы не повторяем весь этот HTML. Так почему бы нам не добавить ту страницу contact о которой мы говорили ранее? ОК, вернёмся обратно в наш файл маршрутов. Когда пользователь делает GET-запрос на страницу contact, я хочу загрузить PHPPagesController@contact:

PHP
Route::get('contact''PagesController@contact');

(2:00)
Не забывайте, вы всегда можете открывать эти файлы вручную, но вместо этого, очень постарайтесь использовать ваш редактор кода или IDE, чтобы очень быстро переключаться на эти имена. В этом случае я иду к PHPPagesController, так что мне не нужно переходить сюда (Http/Controllers) и открывать все эти папки, я могу просто набрать PHPPagesController и перейти, и почти что во всех современных IDE есть для этого специальные сочетания клавиш. Так что просто найдите их в своём редакторе. Как бы то ни было, мы собираемся быстро добавить контактную страницу:

PHP
return view ('pages.contact');

(2:30)
И теперь, если мы переключимся обратно, мы создали этот вид некоторое время назад, так что мы можем просто обновить его:

PHP
@extends('app')

И теперь создадим новый раздел (section) для области содержимого:

PHP
@section('content')
<
h1>Contact Me!</h1>
@
stop

Вот так. Хорошо, у нас есть новая страница, так что давайте пойдём и проверим её:

laravel5.dev/contact

и теперь она тоже работает. Но теперь, что делать, если мы хотим вставлять вещи в разных частях нашей главной страницы?

(3:00)
Например может быть в каком-то виде нужно вставить особый JavaScript или нечто подобное. Ну что же, тогда просто @yield на ещё один раздел:

PHP
@yield('footer')

Думайте об этом как о способе сказать: «Эй, если кто хочет добавить тут некоторый контент, просто создайте раздел и готово». Так, допустим, наша страница с контактами будет содержать специальный JavaScript. Тогда:

PHP
@section('footer')
@
stop

И теперь мы просто выведем здесь предупреждение:

<script>alert ('Contact form scripts');</script>

(3:30)
Главное что здесь нужно понять — с этим подходом, предупреждение будет только отображаться на странице Contact, а не на странице About. Потому что здесь (about.blade.php), у нас не было раздела для подвала, так что он останется пустым. Итак, ещё один раз. Обновим. Видим предупреждение (alert), но если мы перейдём на laravel5.dev/about, то, конечно, его там нет. И действительно, для нашего текущего уровня знаний, это всё что нам нужно знать о мастер-страницах.

(4:00)
Но почему бы нам не пойти дальше и не поговорить ещё немного о вещах, связанных с Blade? Вы уже узнали о расширении мастер-страниц и разделов, и также, на последнем занятии, вы узнали о том, как выводить на экран данные. Но как насчет обычных вещей, например, что делать, если я хочу сделать быструю проверку с if? Ну, опять же, с обычным PHP вам пришлось бы открыть блок PHP, так? Вместо этого, мы просто будем использовать символ @ и затем if.

(4:30)
@if, наше условие, а затем закроем всё это с @endif. Так, допустим, нашей быстрой проверкой будет:

@if ($first == 'John')
<h1>Hi John</h1>

Это, конечно, смешно, но мы выведем «Hi John» — просто чтобы показать вам, что у нас есть условие. В противном случае мы будем делать что-то другое:

@else
<h1>Else</h1>
@endif

Хорошо, давайте вернёмся и обновим. И вот как использовать простые условные операторы внутри ваших видов. И вы будете делать такого рода вещи довольно часто, особенно когда вы фильтруете через коллекции.

(5:00)
Так, например, есть похожий на @if, но противоположный ему @unless, и в мире PHP просто думайте что это if (!...) (если не). Это обратный оператор. Но у нас также есть вещи, такие как @foreach или для некоторых особых случаев @foreelse. Что означает, если у вас есть некоторый контент, для каждого из них, сделать это. В противном случае если у вас ничего нет, то сделайте это. И это может быть полезно, если вы хотите отфильтровать коллекцию, но вполне возможно, что в этой коллекции нет элементов.

(5:30)
И в тех случаях, вы хотите сообщить пользователю: «Извините, результатов нет». Вы можете использовать @foreelse для этого, или вы всегда можете сделать @if и затем вложенные @foreach внутри него. Так почему бы нам это не попробовать? Мы идём обратно в About, и сделаем заголовок:

<h3>People I Like:</h3>

И всё, что мы хотим сделать здесь, это принять массив от нашего контроллера, он придет из какого-то хранилища данных, и мы хотим пройти через все эти элементы и отобразить их здесь.

(6:00)
Мы собираемся создать здесь неупорядоченный список, и напишем:

PHP
@foreach ($people as $person)

В этих случаях мы будем просто выводить имя человека:

<li>{{ $person }}</li>

Наконец, мы всё завершили, так что мы сделаем @endforeach. Хорошо, но мы не совсем закончили, потому что мы должны передать PHP$people в вид. Так что давайте сделаем это прямо здесь. Люди, которых я люблю... И мы перечислим Laravel сообщество. Как насчет, конечно, Тейлор Отуэлл и затем может быть старый добрый Дейл, и Эрик Барнс и давайте на них и остановимся, это не имеет значения:

PHP
$people = ['Taylor Otwell''Dayle Rees''Eric Barnes'];

(6:30)
Так что теперь я собираюсь передать эту переменную PHP$people и давайте посмотрим, как это сработает:

PHP
return view('pages.about'compact('people'));

Мы вернёмся, обновим, и вот, теперь мы проходим через этот массив и отображаем результаты на странице. Однако помните, что это вероятно будет поступать из базы данных или типа того. Так что вполне возможно, что PHP$people будет равен пустому массиву или пустой коллекции, как мы думаем об этом в Laravel:

PHP
$people = [];

(7:00)
В таких случаях, обратите внимание, мы не только ничего не увидим, но также, если мы проверим исходный код (кстати, на Mac я использую комбинацию клавиш Shift+Command+C чтобы открыть это), то у нас тут всё ещё есть неупорядоченный список. И на самом деле если у нас не было выдано никаких имён, то я не хочу тут никакого HTML, который не будет использоваться, верно? Вместо этого, давайте вернёмся сюда (about.blade.php), и почему бы нам не сделать:

@if (count ($people))

(7:30)
Если у нас есть люди, чтобы работать с ними, то пройдём через них. В противном случае не будем вообще ничего делать. И вот и всё. Так что если мы вернёмся и обновим, теперь мы ничего не видим, что означает, что мы не захламляем HTML в нашем приложении. ОК, но если мы вернёмся и сделаем так, как у нас было раньше — теперь у нас есть данные, поэтому мы через них пройдём. Хорошо, отличная работа, вы теперь немного узнали о Blade.

(8:00)
Здесь, конечно, ещё много всего можно изучить, но на данный момент, нам этого уже достаточно чтобы много чего сделать. Поэтому в следующем видео давайте перейдём к чему-нибудь ещё.

Как вы считаете, полезен ли этот материал? Да Нет

Комментарии (4)

evth

Идея хорошая, однако не лучше ли просто записать такой же видос?

Proger_XP

В смысле переведённые Laracasts? Для этого нужно разрешение автора, а он его не даёт. Но если вы начитаете и выложите на YT, то я дам ссылку.

evth

Я имею в виду просто записать свои видео с тем же содержанием, что и у Джефри

Proger_XP

Запишите.

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.