概要
今回はRouteを利用してURLから指定されるパラメータをサーバ側で受け取ることについて知ってみます。
Routeについて簡単に説明するとパスが設定されているアドレス以外はアクセスが不可になります。
つまり、不正なアドレスからアクセスが不可ということです。
事前準備
Laravel11の環境がすでに準備されている方はこの事前準備はスキップしても大丈夫です。
Raspberry環境でLaravel11環境を構築については下記の記事を参照してみてください。
■Raspberry PIにLaravel11をインストール
■Hello World出力(Laravel11)
URLに指定されたパラメータの値をサーバ側で受け取る
①次のソースコードを「routes-web.php」に追加します。
「{name?}」の指定にて「?」がない場合は、必ず値の設定が必要です。そして{name ?}はパラメータが正しく指定されても値が画面に正しく表示されないです。
※「?」はNULL値を許容することです。
$name=nullはURLに値が指定されなかったらNULLに設定されます。もしここで$nameのように宣言した場合は、URLにパラメータの指定がない場合は、404エラーになります。
Route::get('/user/{name?}', function ($name=null) {
return 'Hello, '.$name;
});
②次のURLを確認します。
確認URL:http://192.168.1.65:8000/users/tanaka
③次のようにURLに指定されているパラメータがサーバ側に渡された値を画面に表示ができます。
URLに指定されたパラメータの値を正規表現で制御
①次のソースコードを「routes-web.php」に追加します。
下記の正規表現では「0-9a-zA-Z」+から始まるproductIDの場合は正常に画面が表示されます。正規表現に対象外の場合は、404エラー画面が表示されます。
Route::get('/product/{id}', function ($id) {
return response("Product ID:{$id}");
})->where('id','[0-9a-zA-Z]+')
;
②次のURLを確認します。
確認URL:http://192.168.1.65:8000/product/aaaa
③次のようにURLに指定されたパラメータをサーバ側に渡してその値を画面に表示ができます。
print_rの代わりにLaravel11ではdd($XXXX)を利用
①画面から受け取った値を画面に出したい場合は、次のコードに修正します。
Route::get('/users/{name?}', function ($name=null) {
dd($name);
return 'Hello, '.$name;
});
②次のURLを確認します。
確認URL:http://192.168.1.65:8000/users/tanaka
③次のようにURLに指定されたパラメータをサーバ側に渡してその値を画面に表示ができます。
requestのすべての値を画面に表示
①次のソースコードを「routes-web.php」に追加します。
※「use Illuminate\Http\Request;」も追加してください。
Route::get('/search?name=tanaka&age=55', function (Request $request) {
dd($request);
});
②次のURLを確認します。
確認URL:http://192.168.1.65:8000/search?name=tanaka&age=55
③次のようにURLに指定されたすべてのパラメータが確認できます。
終わりに
今日はURLに指定されるパラメータの値を取得及び指定する際に正規表現でデータ入力の制限、画面から取得可能な$requestの値を確認してみました。
次回はHTMLテンプレート側になるblade templateについて確認しましょう。今日はここまでです。ありがとうございます。