{{Laracast Laravel 5 Fundamentals, 13, View Partials and Form Reuse, 27.01.2015, 11.07.2016, https://laracasts.com/series/laravel-5-fundamentals/episodes/13}} %%(hvlraw) %% (0:00) Итак, у нас есть конечный маршрут, показывающий форму для создания новой статьи. Отлично. Но, как вы можете себе представить, нам вероятно понадобится ещё одна форма для ситуаций, когда статью требуется обновить. Так как именно это будет работать? Что же, давайте поговорим о ходе работы и в процессе, у нас будет возможность поговорить о некоторых из лучших практик работы с представлениями. ОК, первый шаг - в нашем файле %%(t)routes.php%% нам нужно добавить новый маршрут, показывающий форму для редактирования статьи. (0:30) Мы могли бы добавить ещё один маршрут вручную, но, как выясняется, есть специальный тип маршрутов - ресурсный, который мы можем использовать в подобных случаях. Я покажу вам оба метода. Если нам нужно добавить маршрут вручную, то мы могли бы сказать: %% Route::get('article/{id}/edit') %% Это была бы страница, показывающая форму редактирования существующей статьи с таким идентификатором. (1:00) Здесь снова мы просто следуем простым практикам REST. Назовём это %%(t)ArticlesController@edit%%: %% Route::get('article/{id}/edit', 'ArticlesController@edit'); %% Это был ручной способ. Но теперь мы начинаем замечать, что у нас есть ресурс, в данном случае, %%(t)articles%%. Нам нужно показать список статей, или форму создания новых статей, или страницу с одной статьёй, или способ сохранения новой статьи, или способ редактирования статей, или способ для её обновления или удаления. (1:30) Это основные вещи, которые вы будете часто делать в приложениях типа CRUD. Так что с этим в мыслях, Laravel может сделать для нас всё намного проще. Но прежде, чем мы сделаем это, позвольте мне показать вам новую команду в Artisan. Если мы перейдем в терминал, я могу запустить: %%(sh) php artisan route:list %% Я хочу посмотреть все маршруты в моём приложении. Итак, у нас есть эти две статические страницы из первых видео (%%(t)about%%, %%(t)contact%%), а также те, что относятся к статьям. (2:00) Хорошо, но теперь, если мы закомментируем всё это, не забывайте, что это удалит их, так что теперь у нас тут просто есть эти две фиктивные страницы, и теперь я скажу: %% Route::resource('articles', 'ArticlesController'); %% ОК, так что теперь, лишь одна строка кода, но если мы запустим это, Laravel автоматически сгенерирует для нас все эти маршруты. И самое главное, обратите внимание, что они полностью соответствуют тому, что мы раньше делали вручную. (2:30) И это именно то, что я имею в виду, когда говорю о соблюдении здесь основных соглашений. Так что если мы приводим список всех статей, или создаём статью, или сохраняем её, или выводим на экран, или редактируем, или обновляем, всё это мы рассмотрим в этом уроке. И, наконец, у нас есть маршрут для удаления статьи используя REST. И это означает, что весь этот стандартный код, который может быть полезен в некоторых ситуациях, на самом деле может быть удален в пользу %%Route::resource%%. (3:00) Насколько это круто, а? ОК, так что теперь, когда мы рассмотрели оптимизацию маленьких маршрутов, давайте перейдем к %%ArticlesController%% и создадим этот метод %%edit()%%. Так что прямо здесь напишем новый код: %% public function edit() { %% И помните, это показывает страницу для редактирования существующей статьи. Так что мы можем начать с: %% return view('articles.edit'); } %% Однако, если мы редактируем существующую статью, то нам нужно извлечь эту статью из базы данных. (3:30) Хорошо: %% $article = Article::findOrFail($id); %% И не забывайте, что мы здесь можем получить идентификатор в качестве параметра: %% public function edit($id) %% Если перейдём обратно в терминал, вот то, на что мы отвечаем. Обратите внимание, у нас тут есть символ-шаблон, который Laravel и будет захватывать. И независимо от того, какое там значение, а в данном случае это идентификатор, оно будет передано в метод %%edit()%%. Отлично! Таким образом, мы просто берём этот идентификатор, находим соответствие в таблице статей в нашей базе данных, сохраняем его в %%$article%%, и затем, наконец, передаём его в представление: %% return view('articles.edit', compact('article')); %% (4:00) Хорошо, это значит что наш следующий шаг – пойти в %%(t)views/articles%% и создать новый файл: %%(t) edit.blade.php %% Теперь, просто чтобы освежить вашу память, нам нужен раздел для содержания. Так: %%(t) @extends('app') @section('content') %% Хорошо, так что давайте напишем: %%(h)