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

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=管理画面の２つに分けています。

**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編)](http://qiita.com/shiichi/items/1c06bba7f51a0f09d1ba
)