この記事はAltplus Advent Calendar 2017の8日目のエントリです。
概要
- 主にコード量を減らすことが出来る、読みやすくなるようなLaravelの機能を紹介してく
- 備忘録的な感じ
ルートプレフィックス
どんなもの?
- 同じprefixのURLを一つにまとめることが出来る
- 下記みたいなURLをまとめて書ける
使わないで書くと?
Route::get('/admin', 'Admin\AdminController@top'); Route::get('/admin/hoge', 'Admin\AdminController@hoge'); Route::get('/admin/huga/piyo', 'Admin\AdminController@hugaPiyo');
使って書くと!
Route::prefix('admin')->group(function () {
Route::get('/', 'Admin\AdminController@top');
Route::get('/hoge', 'Admin\AdminController@hoge');
Route::get('/huga/piyo', 'Admin\AdminController@hugaPiyo');
});
メリット
- ルーティングを見た時に関連のあるルーティングがぱっと見で分かりやすくなる
- 上記の例の場合だと、「管理者画面関連のルーティングなんだろうなぁ」と予想が付く
名前空間ルーティング
どんなもの?
- 同じ名前空間を持つコントローラーを一つにまとめることが出来る
- 例えば、app/Http/Controllers/Admin/配下にコントローラーファイルを複数作成していた場合にまとめて書ける
使わないで書くと?
Route::prefix('admin')->group(function () {
Route::get('/', 'Admin\AdminController@top');
Route::get('/hoge', 'Admin\AdminController@hoge');
Route::get('/huga/piyo', 'Admin\AdminController@hugaPiyo');
});
使って書くと!
Route::prefix('admin')->namespace('Admin')->group(function () { Route::get('/', 'AdminController@top'); Route::get('/hoge', 'AdminController@hoge'); Route::get('/huga/piyo', 'AdminController@hugaPiyo'); });
メリット
- ルートプレフィックスと同じ
リソースフルルーティング
どんなもの?
- 基本的なCRUD関連のルーティングをまとめて書ける
使わないで書くと?
Route::prefix('users')->group(function () {
Route::get ('/', 'UserController@index');
Route::get ('/create', 'UserController@create');
Route::post ('/', 'UserController@store');
Route::get ('/{user}', 'UserController@show');
Route::get ('/{user}/edit', 'UserController@edit');
Route::patch ('/{user}', 'UserController@update');
Route::delete('/{user}', 'UserController@destroy');
});
使って書くと!
Route::resource('users', 'UserController');
メリット
- コード量かなり減らせる
- 一目でそのコントローラーがCRUDの要素を持っていることが分かる
- コントローラー内のアクションメソッドも同じになるので、共通認識での開発ができる
備考
- リソースフルルーティングに対応するコントローラーは、下記のようなコマンドで一発で作成できる
php artisan make:controller UserController --resource
フォームリクエストバリデーション
どんなもの?
- バリデーションをapp/Http/Requests/配下に作成されるフォームリクエストクラスに書くことが出来る
使わないで書くと?
- 下記のコードをモデルやサービスクラスでメソッド化して、コントローラで呼び出さなければならない
$request->validate([ 'name' => 'required', 'email' => 'required|email', ]);
使って書くと!
- 下記のようなコマンドでフォームリクエストクラスを作成する
php artisan make:request StoreBlogPost
- app/Http/Requests/StoreUser.phpが作成されるので、下記のように修正する
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreUser extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required', 'email' => 'required|email', ]; } }
- コントローラーのアクションメソッドで、上記のクラスを引数に指定して呼び出すだけで、バリデーションを通ったもののみがアクションメソッドの処理を実行する
public function store(StoreUser $request) { }
メリット
- バリデーションについてのコードをフォームリクエストクラスに任せることができる
- (今回は解説しないが)認証機能、エラーメッセージの設定も出来る
最後に
「Laravelにはこんな機能もあるよ!」等のコメントいただけると嬉しいです!