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編)