{{Laracast Laravel 5 Fundamentals, 9, Basic Model/Controller/View Workflow, 22.01.2015, 15.05.2016, https://laracasts.com/series/laravel-5-fundamentals/episodes/9}} %%(hvlraw) %% (0:00) Теперь, когда мы создали класс %%Article%%, и мы немного понимаем как работает Eloquent, почему бы нам дальше не рассмотреть процесс создания контроллера, загрузку записей из БД и отображение их на странице через наш вид? Это стало бы хорошим, простым примером начального уровня. Как я понимаю, наш первый шаг - нужно создать контроллер и также необходимо зарегистрировать маршрут (route). Итак, если мы откроем %%(t)routes.php%% - я уже показывал вам тот самый способ регистрации маршрутов. (0:30) Укажите URI, имя контроллера, знак %%(t)@%%, и вызываемый метод. Однако, если хотите (и особенно это полезно для небольших, быстрых задач), то можно сказать: %% Route::get('foo', function() { return 'Bar'; }); %% Мы просто передали замыкание. Например, если я возвращаю %%'Bar'%%, то это сработает. И чтобы вам это доказать - мы откроем в браузере эту страницу: %%(t) laravel5.dev/foo %% (1:00) ...и точно, мы получили %%'Bar'%% в ответ. Это может быть очень удобно, особенно для написания штук типа API. Однако для обычных приложений я больше предпочитаю такой подход: %% Route::get('contact', 'PagesController@contact'); %% То есть когда пользователь делает GET-запрос к статьям, то мы хотим загрузить %%ArticlesController%%, а именно его метод %%index()%%: %% Route::get('articles', 'ArticlesController@index'); %% Отлично. Мы зарегистрировали маршрут, но у нас ещё не создан %%ArticlesController%%. Создадим его: %%(sh) php artisan make:controller ArticlesController --plain %% И снова применим здесь параметр %%(t)--plain%%. (1:30) Так, давайте проверим это и мы будем готовы начать. Мы вызовем метод %%index()%%, и посмотрим, сработает ли это. Как насчёт: %% public function index() { return 'get all articles'; } %% Отлично. Теперь назад в браузер и открываем: %%(t) laravel5.dev/articles %% Наш метод срабатывает. Классно. Следующий шаг... мы хотим загрузить все статьи, не так ли? И вы уже научились применять некоторые простые методы Eloquent на последнем уроке. (2:00) Так, давайте попробуем. Я хочу сделать так: %% $articles = Article::all(); %% Мы научились использовать %%Article::all()%%, но не забывайте что нам нужно ссылаться на всё пространство имён (%%\App\%%). Взамен, я просто импортирую класс в самом верху: %% use App\Article %% ОК, это довольно красивый способ, особенно для небольших CRUD-приложений. Замечательно! Не нужно здесь ничего менять. Теперь смотрите что случится, если мы просто вернём результаты этого вызова: %% return $articles; %% (2:30) Переключимся обратно в браузер, обновим страницу... Смотрите! Мы возвращаем JSON. Это одна из классных штук в Laravel - он достаточно умён чтобы знать, что если мы так используем %%return%%... Может быть мы строим простой API или нечто наподобие того, и в этом случае всё нужно приводить к формату JSON. И если вы хотите взглянуть на сырые выходные данные - то вот, что мы получим здесь. Классно? Всё это уже в комплекте. Но конечно же, в данном случае, мы хотим всё красиво оформить и вывести кое-какой HTML. (3:00) Так что нам нужен не JSON. Мы хотим загрузить вид (view). Возвращаем новый вид (%%(t)articles.index%%), используя соглашение о котором уже говорили, и, наконец, я хочу передать переменную %%(t)articles%%: %% return view('articles.index', compact('articles')); %% Так что запомните - мы можем прямо так и напечатать. Или если хотите больше наглядности, то можно так: %% return view('articles.index')->with('articles', $articles); %% Любой из подходов работает. В моём случае, для простых вещей, мне нравится подход с %%compact()%%. Но, вам решать, тут нет неверного решения. Дальше. (3:30) Я переключусь на %%(t)/resources/views%% - нам нужно создать папку для новых статей: %%(t) articles/index.blade.php %% Дальше, не забудьте, что у нас есть эта главная мастер-страница, и мы рассмотрели идею с файлом-макетом в одном из прошлых уроков. Нам лишь остаётся расширить его и создать раздел для нашего контента, а если нужно как-то изменить подвал (footer), то можем и это сделать. (4:00) %%(html) @extends('app') %% Далее для моего раздела (тут его содержимое): %%(html) @section('content'); %% Начнём с простого тега %%(t)