Если видео недоступно для просмотра, попробуйте выключить блокировщик рекламы.

Фактически, любой круд состоит из 7 маршрутов, контроллера и шаблонов. Причем большая часть этого кода идентична, особенно маршруты. Они не содержат логики и всегда строятся по одному и тому же принципу.

Laravel частично заимствовал из Rails еще один механизм, который называется "ресурсный роутинг". Он упрощает создание типичных крудов, за счет полной унификации всех маршрутов и способах их обработки. Вместо описания 7 разных маршрутов, ресурсный роутинг позволяет указать один метамаршрут:

<?php

Route::resource('/articles', 'ArticleController');

Внутри себя он превращается в те самые семь маршрутов, которые мы реализовывали в предыдущих уроках. Их можно увидеть с помощью команды artisan:

$ php artisan route:list
+-----------+-------------------------+------------------+------------------------------------------------+
| Method    | URI                     | Name             | Action                                         |
+-----------+-------------------------+------------------+------------------------------------------------+
| GET|HEAD  | /                       |                  | Closure                                        |
| GET|HEAD  | articles                | articles.index   | App\Http\Controllers\[email protected]   |
| POST      | articles                | articles.store   | App\Http\Controllers\[email protected]   |
| GET|HEAD  | articles/create         | articles.create  | App\Http\Controllers\[email protected]  |
| GET|HEAD  | articles/{article}      | articles.show    | App\Http\Controllers\[email protected]    |
| PUT|PATCH | articles/{article}      | articles.update  | App\Http\Controllers\[email protected]  |
| DELETE    | articles/{article}      | articles.destroy | App\Http\Controllers\[email protected] |
| GET|HEAD  | articles/{article}/edit | articles.edit    | App\Http\Controllers\[email protected]    |
+-----------+-------------------------+------------------+------------------------------------------------+

Довольно неплохо. В проектах где подобных крудов много (любой типичный веб-проект), ресурсный роутинг очень помогает. Он не просто сокращает количество кода, но и дает хорошую унификацию. Нужно меньше думать и меньше спорить. Все уже спроектировано.

Следующий шаг – упрощение контроллера. Во-первых можно сразу сгенерировать контроллер, со всеми нужными обработчиками. Во-вторых, этот контроллер можно интегрировать с нужной моделью:

php artisan make:controller ArticleController --resource --model=Article

На выходе получим такой контроллер:

<?php

namespace App\Http\Controllers;

use App\Article;
use Illuminate\Http\Request;

class ArticleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function show(Article $article)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function edit(Article $article)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Article $article)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function destroy(Article $article)
    {
        //
    }
}

Обратите внимание на параметры обработчиков. Laravel самостоятельно находит нужную сущность и достает ее из базы данных. Это позволяет хоть немного, но сократить код.

Самостоятельная работа

  1. Удалите все маршруты связанные со статьями
  2. Удалите контроллер статей (шаблоны оставьте)
  3. Добавьте ресурсный роутинг articles
  4. Сгенерируйте для него контроллер ArticleController
  5. Реализуйте CRUD

Дополнительные материалы

  1. Ресурсный роутинг
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →