LoginSignup
4
4

More than 5 years have passed since last update.

laravel-5-boilerplateのルーティング

Last updated at Posted at 2015-08-27

app/Http/routes.phpを読んでみる
https://github.com/rappasoft/laravel-5-boilerplate

laravel-5-boilerplateがかなりアップデートされて情報が古くなってしまったので編集しました
編集日:2016/01/18

まず、app/Http/route.phpを見ていきます(/**/は消しました)

//app/Http/route.php

<?php
Route::group(['middleware' => 'web'], function() {
    Route::group(['namespace' => 'Language'], function () {
        require (__DIR__ . '/Routes/Language/Language.php');
    });
    Route::group(['namespace' => 'Frontend'], function () {
        require (__DIR__ . '/Routes/Frontend/Frontend.php');
        require (__DIR__ . '/Routes/Frontend/Access.php');
    });
});

Route::group(['namespace' => 'Backend', 'prefix' => 'admin', 'middleware' => 'admin'], function () {
    require (__DIR__ . '/Routes/Backend/Dashboard.php');
    require (__DIR__ . '/Routes/Backend/Access.php');
    require (__DIR__ . '/Routes/Backend/LogViewer.php');
});

Laravelのルーティングの基本

ルートグループ

Route::group(['prefix' => 'admin', 'namespace' => '', 'middleware' => '',], function () {
    /* 
     * ルーティング
     */
});

URLセグメント、名前空間、ミドルウェアなど、多くのルートで同じ共通の制約・設定を行いたい場合ルートグループを利用すると便利です。

グループに共通のURLセグメントを指定する

Route::group(['prefix' => 'admin'], function ()
{
    Route::get('users', function()
        {
            // "/admin/users"のURLと一致
        });
});

グループに共通の名前空間を指定する

デフォルトでRouteServiceProviderが名前空間グループを含むroutes.phpファイルを読み込んでいるので、完全な名前空間の先頭からApp\Http\Controllersを除いてコントローラールートを登録できます。

Route::group(['namespace' => 'Frontend'], function() {
    /* 
     * "App\Http\Controllers\Frontend" 
     * が名前空間のコントローラーが適応される
     */
});

グループに共通のミドルウェアを指定する

Route::group(['middleware' => 'auth'], function() {
    /* 
     * app/Http/Kernel.php に記述されたミドルウェアが適応される
     * (Kernel.phpに関してはあとで解説)
     */
});

以下公式ドキュメント
https://laravel.com/docs/5.2/routing
http://readouble.com/laravel/5/0/0/ja/routing.html

解説

まず、ルートグループでLanguage + Frontend = メインアプリケーション、Backend=管理画面の2つに分けています。

Language
名前空間が App\Http\Controllers\Language~~ のコントローラーを利用
ミドルウェア web を利用
app/Http//Routes/Language/Language.php を読み込み

Frontend
名前空間が App\Http\Controllers\Frontend~~ のコントローラーを利用
ミドルウェア web を利用
app/Http/Routes/Frontend/Frontend.php
app/Http/Routes/Frontend/Access.php   の2つを読み込み

Backend
名前空間が App\Http\Controllers\Backend~~ のコントローラーを利用
ルートのプレフィックスに /admin を利用
ミドルウェア admin を利用
app/Http/Routes/Backend/Dashboard.php
app/Http/Routes/Backend/Access.php
app/Http/Routes/Backend/LogViewer.php の3つを読み込み

ミドルウェア

ミドルウェアがどのファイルを読み込んでいるかはapp/Http/Kernel.phpに書かれています

//app/Http/Kernel.php

<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    ];

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \App\Http\Middleware\LocaleMiddleware::class,
        ],
        'admin' => [
            'web',
            'auth',
            'access.routeNeedsPermission:view-backend',
        ],
        'api' => [
            'throttle:60,1',
        ],
    ];

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        /**
         * Access Middleware
         */
        'access.routeNeedsRole' => \App\Http\Middleware\RouteNeedsRole::class,
        'access.routeNeedsPermission' => \App\Http\Middleware\RouteNeedsPermission::class,
    ];
}

このファイルから以下のことがわかります

LanguageとFrontendは以下の6つのミドルウェアを利用
\App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\LocaleMiddleware::class

Backendは上記の6つに以下の2つを加えた計8つのミドルウェアを利用
\App\Http\Middleware\Authenticate::class,
\App\Http\Middleware\RouteNeedsPermission::class

Kernel.phpや各ミドルウェアに関してはこちらの解説記事を御覧ください。

次は
たぶんこの中で一番複雑なBackendのルーティングを読んでいきます
laravel-5-boilerplateのルーティング(backend編)

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4