のぐそんブログ

暗いおじさんがシコシコ書くブログです。

Laravelでrouteの便利な指定の仕方のメモ

routeの便利な指定の仕方のメモです。

middlewareをまとめて割り当てる

middleware設定割り当てる場合以下のようにしますが、ルートグループを利用することで、まとめて割り当てることができます。

普通の書き方
Route::get('/Hoge', 'HogeController@index')->middleware(HogeMiddleware::class);
Route::get('/Hoge/other', 'HogeController@show')->middleware(HogeMiddleware::class);
まとめて割り当てる
Route::middleware([HogeMiddleware::class])->group(function () {
    Route::get('/Hoge', 'HogeController@index');
    Route::get('/Hoge/other', 'HogeController@show');
});

名前空間をまとめて割り当てる

特定の用途に利用しているControllerなどをディレクトリ単位でまとめた場合に、groupでルート設定を行うと便利。

例えば動物関連のコントローラーをまとめたAnimalディレクトリがあるとします。

普通の書き方
 Route::get('/animal', 'Animal\AnimalController@index');
 Route::get('/animal/dog', 'Animal\DogController@show');
まとめて割り当てる
Route::namespace('Animal')->group(function () {
    Route::get('/animal', 'AnimalController@index');
    Route::get('/animal/other', 'DogController@show');
});

ディレクトリが深い場合は便利なきがします。

ルートパラメーターとモデルのインスタンスを結合する

ルートにidを連携することで、該当するモデルのインスタンスを簡単に取得することができます。

usersテーブルからrouteで連携したidのモデルインスタンスを取得してみます。

普通に書くと(素人なので普通じゃなかったらすみません)
◎ /routes/web.php
Route::get('/hoge/{user}','HogeController@index');
◎ app/Http/Controllers/HogeController.php
    public function index($id)
    {

        $data = [
            'msg' => User::where('id',$id)->first(),
        ];

        return view('hoge.index', $data);
    }
◎/routes/web.php
Route::get('/hoge/{user}','HogeController@index');
◎ app/Http/Controllers/HogeController.php
<?php

namespace App\Http\Controllers;

use App\Person;
use Illuminate\Http\Request;

class HogeController extends Controller
{
    public function index(User $user)
    {
        $data = [
            'msg' => $user,
        ];

        return view('hoge.index', $data);
    }
}

どちらも、http://localhost/hoge/2でアクセスすると、以下のようなデータが取得できます。

{"id":2,"name":"fuga","mail":"fuga@example.com","age":20}