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}