ルーティングについて

2019/05/08

URLとコントローラのアクションの対応ルール(ルート)を作成することをルーティングと言います。

Laravel5.2 では app/Http/route.php に記述します。

Laravel5.3 からは routes/web.php にルートを定義します。

route.php(web.php) では「このURLでアクセスされた時は、このコントローラのアクションを呼び出してください」と定義します。

現在のフレームワークではこのルーティングの機能が実装されており、laravel でも例外ではありません。

なので、フレームワークがはじめての人はまずはここを抑えましょう。「Hello Wold」を表示させることさえできません。

今回はこのルーティングについてのエントリーです。

 

記述方法

書式

ルーティングには Route ファサードを使います。


Route::get( $uri, $callback);

 
HTTPリクエストに対して定義できるメソッドの項目は以下になります。


// GETリクエストに対してのルーティング定義
// 通常のURL遷移やフォームのGETリクエストに対して用います
Route::get($uri, $callback);

// POSTリクエストに対してのルーティングを定義します。
// 主にフォームのPOSTリクエストに対して用います
Route::post($uri, $callback);

// putリクエストに対してのルーティングを定義
Route::put($uri, $callback);

// patchリクエストに対してのルーティングを定義
Route::patch($uri, $callback);

// deleteリクエストに対してのルーティングを定義
Route::delete($uri, $callback);

基本的に使用するのはGETとPOSTメソッドがほとんどです。

put / patch /delete / optonsメソッドに関しては REST API などを作成する時に使われます。

ポイント

post() put() delete()メソッドを用いる際は、送信元からCSRFトークンフィールドを渡す必要があります。

 

「$callback」をクロージャーで記載

http://{ドメイン}/hello にアクセスすると「Hello World」と表示されます。

実践ではあまり使わない記述方法です。


Route::get('hello/', function()
{
  return 'Hello World';
});

 

「$callback」をコントローラとメソッドで指定

通常はこちらの記述をします。


Route::get('hello/', 'helloController@goodmorning');

 

パラメータを取得

URLからコントローラ側へパラメータを渡したい時は以下のように記述します。


Route::get('hello/{name}', 'helloController@goodmorning');


:
class helloController extends Controller
{
    public function goodmorning($name)
    {
        print_r('Good Morning! '.$name);
    }
}

ポイント

末尾にクエスチョンマーク「?」をつけるとパラメータが無くても許容されます。


Route::get('hello/{name?}', 'helloController@goodmorning');

 

URLの最初の文字列を一括で指定(prefix)

・http://{ドメイン}/user/top
・http://{ドメイン}/user/settings
・http://{ドメイン}/user/logout

上記のURLをprefixメソッドを使って一括指定します。


Route::prefix('user')->group(function(){
    Route::get('top', 'UserController@top');
    Route::get('settings', 'UserController@settings');
    Route::get('logout', 'UserController@logout');
});

 

ミドルウェアの指定

あるルーティングに対して何らかのミドルウェアを適用させる場合は、以下になります。


Route::group(['middleware' => 'auth.admin'], function(){
    Route::get('top', 'UserController@top');
    Route::get('settings', 'UserController@settings');
    Route::get('logout', 'UserController@logout');
});

 

prefix & ミドルウェアの指定

prefixとミドルウェアの両方を指定したい場合は、grout() 内に配列で指定してやります。


Route::group(['prefix' => 'user', 'middleware' => 'auth:admin'], function(){
    Route::get('top', 'UserController@top');
    Route::get('settings', 'UserController@settings');
    Route::get('logout', 'UserController@logout');
});

 

パラメータをそのままBladeのファイル名に

例えば、

http://{ドメイン}/contents/sample
http://{ドメイン}/contents/test
http://{ドメイン}/contents/demo

にアクセスして

resources\views\contents\sample.blade.php
resources\views\contents\test.blade.php
resources\views\contents\demo.blade.php

を表示する場合


Route::get('/contents/{name1}', 'ContentsPagesController@page1');

 
コントローラには以下を記述します。


:
public function page1($name1){
  return view('contents.'.$name1);
}

 

RESTfulなルーティング

ルーティングにRoute::resourceを指定することで、CRUDルーティングを一度に行うことができます。


Route::resource('users', 'UserController');

HTTPメソッド URI コントローラのメソッド 用途
GET /users index() 一覧表示
GET /users/create create() 追加ページ
POST /users store() 追加
GET /users/{id} show() 該当データ表示
GET /users/{id}/edit edit() 更新ページ
PUT /users/{id} update() 更新
DELETE /users/{id} destroy() 削除

上記のコントローラとメソッドをartisanコマンドで自動生成してくれます。


$ php artisan make:controller UsersController --resource

 
生成されたスケルトンは以下になります。


{
    public function index()
    {
        //
    }
    public function create()
    {
        //
    }
    public function store(Request $request)
    {
        //
    }
    public function show($id)
    {
        //
    }
    public function edit($id)
    {
        //
    }
    public function update(Request $request, $id)
    {
        //
    }
    public function destroy($id)
    {
        //
    }
}

 
Laravelのルーティングに関しては以上です。

本庄マサノリ

仕事でLaravelを使っています。気づいたことや新しい発見など情報を発信していきます。メールはこちら

 

-基礎知識