Laravel のルーティングについて

ルーティング情報\{Laravelプロジェクト}\routes\web.phpに記述します。

ルーターメソッドの書式

よく使うルーターメソッドは以下のとおりです。第2引数の$callbackは無名関数だったり、コントローラのアクションメソッドだったりします。
このコールバック($callback)で表示する画面の情報を指定します。

HTTPメソッド 構文
GET Route::get($uri, $callback);
POST Route::post($uri, $callback);
PUT Route::put($uri, $callback);
PATCH Route::patch($uri, $callback);
DELETE Route::delete($uri, $callback);
OPTIONS Route::options($uri, $callback);
全て Route::any($uri, $callback);

無名関数を使用

Route::get("/hello", function () {
    // 処理.
});

コントローラを使用

コントローラクラス内の__invoke()メソッドが使用されます。

Route::get("/hello", "コントローラクラス名");

コントローラのアクションを使用

コントローラクラス内の任意のアクションメソッドを実行したい場合。

Route::get("/hello", "コントローラクラス名@メソッド名");

パラメータについて

パラメータは$uri{パラメータ名}で記述します。

関数の引数で受け取る

対応する無名関数やアクションメソッドにパラメータ数と同じ数の引数を用意します。パラメータ名と引数の名前は違っていても問題ありません(順番に割り当てられる)。ただし、数は一致しておく必要があります。

Route::get("/hello/{name}", function ($name) {
    print("<h1>Laravel " . $name . ".</h1>");
    return null;
});
  • ブラウザでhttp://localhost/laravel-prj/public/hello/Japanにアクセス Laravel画面出力例

パラメータ名と引数の名称が全く違っている例

Route::get("/hello/{name}/{comment}", function ($comment, $name) {
    print("<h1>Laravel " . $name . ", " . $comment . ".</h1>");
    return null;
});
  • ブラウザでhttp://localhost/laravel-prj/public/hello/Japan/beautifulにアクセス Laravel画面出力例

パラメータを任意にする

設定が任意のパラメータはパラメータ名の最後に?を付けます。
そして、関数定義で引数のデフォルト値を定義します。

ルーティング

Route::get("/show/{id?}", "SampleController@show");

アクションメソッド

public function show($id=0) {
}

これで/showでのアクセスでは$idの値が0になり、/show/1のアクセスでは$idの値が1になります。

上記でパラメータ名に?を付けず/showのルーティングが未定義だと、パラメータなしでアクセスしたとき404 Not Foundになります。

ビューテンプレートとルーティングのパラメータ割り当てについて

Bladeで指定したパラメータ名(連想配列のキー)とルーティングで指定したパラメータ名など、フレームワークが自動で割り当ててくれる分、しっかり理解しておかないとハマってしまいます。

パラメータ名の割り当て順序

  1. Blade側で指定したキーと一致するパラメータ名があれば順序に関係なく、そのパラメータに割り当てる
  2. 残ったキーとパラメータで前から順番に割り当てる

Blade

<?= action('SampleController@list', ['pageNo' => $pageNo, 'id' => $id]); ?>

ルーティング

Route::get("/list/{id}/{page_no}", "SampleController@list");

上記の場合、{id}=id{page_no}=pageNoとなります。

action()でURLを生成する際、ルーティングと一致しない場合(パラメータ不足)はaction()でURLを生成している画面側でエラーとなります。

Requestを使ったパラメータの受け取り

アクションメソッドの引数をRequest $requestとすると全てのパラメータを一括で取得できます。
パラメータは$request->パラメータ名で参照します。パラメータ名はルーティングで指定した名前またはBladeで指定したキー名になります。

Requestの使用には、use Illuminate\Http\Request;が必要です。

アクションメソッド

use Illuminate\Http\Request;

public function show(Request $request) {
}

ルーティングに変数を記述している場合

Blade

<?= action('SampleController@show', ['id' => 1]); ?>

ルーティング

Route::get("/show/{myid}", "SampleController@show");

上記の場合、コントローラでは$request->myidで参照します。

ルーティングに変数を記述していない場合

この方法であれば、action()でパラメータがルーティングと一致しないエラーは発生しません。

Blade

<?= action('SampleController@show', ['id' => 1]); ?>

ルーティング

Route::any("/show", "SampleController@show");

上記の場合、コントローラでは$request->idで参照します。

リダイレクト

ルーティングでリダイレクトを行う場合は以下のとおり。

Route::redirect("/yahoo", "https://www.yahoo.co.jp/");

上記では、http://localhost/laravel-prj/public/yahooにアクセスすると、https://www.yahoo.co.jp/へリダイレクトされます。

このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

関連コンテンツ

スポンサードリンク

Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です