カテゴリー: BackEnd

Laravelのコントローラの基礎

はじめに

今回の記事では、PHPのフレームワークであるLaravelのルーティングやコントローラに関する基礎知識を紹介します。Laravelの基礎知識に関してはこちらをご覧ください。

ルーティング

Laravelのルートティングは、routesディレクトの web.php と api.php に定義します。

ルーティングの定義方法は3種類あり、1つ目はクラス名とメソッド名を記述する方法です。以下の例では、 /home 宛のリクエストを HomeController の index メソッドで処理します。

Route::get('/home', 'HomeController@index');

2つ目はクラス名のみを指定する方法です。メソッド名を省略した場合は __invoke メソッドで処理します。

Route::get('/home', 'HomeController@index');

3つ目はクロージャで記述する方法です。

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

使用可能なメソッド

Laravelで使用できるメソッドは下記のとおりです。

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

以下のように複数のメソッドに対応したルートを定義することもできます。

Route::match(['get', 'post'], '/home', function () {
    return 'Hello, World'
});

また、Route::any を使うとすべてのメソッドに対応したルートを定義することができます。

Route::any('/home', function () {
    return 'Hello World'
});

リダイレクト

他のURIにリダイレクトさせたい場合は Route::redirect を使います。

Route::redirect('/before', '/after', 301);

Viewの返却

コントローラ側で処理せずに特定のビューを返却すればよい場合は、 Route::view を使います。第2引数にはビュー名を渡します。ビューへデータを渡したい場合は第3引数に配列の形で渡します。

Route::view('/top', 'top', ['title' => 'Top']);

ルートパラメータ

CRUDの画面などのように、ルート中のURIセグメントを取得したい場合は以下のようにします。

Route::get('post/{id}', function ($id) {
    return 'Post ID = '.$id;
});

パラメータ名の後に ? をつけるとパラメータを省略することができます。この場合は、デフォルト値を設定する必要があります。

Route::get('post/{id?}', function ($id = 1) {
    return 'Post ID = '.$id;
});

ミドルウェア

ルートグループ内のすべてのルートにミドルウェアを指定するには Route::middleware メソッドを使用します。このとき、ミドルウェアは定義された順番で実行されます。

Route::middleware(['mid1', 'mid2'])->group(function () {
    Route::get('/home', 'HomeController@index');
    Route::get('/home{id}', 'HomeController@show');
});

プレフィックス

ルートグループ内のすべてのルートに特定のプレフィックスを指定するには Route::prefix メソッドを使用します。

Route::prefix('admin')->group(function () {
    Route::get('users', 'UsersController@index');
    Route::get('users/{id}', 'UsersController@show');
});

バリデーション

Laravelではコントローラ側でバリデーションを行います。バリデーションの方法は2種類あり、1つ目はコントローラに直接記述する方法で、2つ目はフォームリクエスに記述する方法です。

コントローラでバリデーション

コントローラでバリデーションする場合は以下のようになります。バリデーションに失敗した場合は例外が投げられます。

public function store(Request $request)
{
    $validatedData = $request->validate([
        'name'  => 'required|max:32',
        'email' => 'required|unique|max:255',
    ]);

    // バリデーション通過後の処理
}

バリデーション失敗時に特定の処理をしたい場合は、以下のようにします。

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'name'  => 'required|max:32',
        'email' => 'required|unique|max:255',
    ]);

    if ($validator->fails()) {
        // バリデーション失敗時の処理
    }

    // バリデーション通過後の処理
}

フォームリクエストでバリデーション

フォームリクエストは以下のコマンドで作成できます。

$ php artisan make:request UserPost

フォームリクエストでバリデーションする場合は以下のようになります。

public function rules()
{
    return [
        'name'  => 'required|max:32',
        'email' => 'required|unique|max:255',
    ];
}

また、エラーメッセージのカスタマイズは以下のようにします。

public function messages()
{
    return [
        'name.required'  => '名前は必須です',
        'email.required' => 'メールアドレスは必須です',
    ];
}

さいごに

Laravelのルート定義とバリデーションの書き方を紹介しました。

おすすめ書籍

     

Hiroki Ono

シェア
執筆者:
Hiroki Ono
タグ: laravelphp

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前