【Laravel】Routingの実装方法まとめ!web.phpの使い方
この記事からわかること
- LaravelのRoutingとは?
- WebページにアクセスするURLを設定する方法
- web.phpの使い方
- パラメータを受け取る方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Laravel:8.83.27
- Laravel Installer:4.2.9
- PHP(MAMP): 8.0.8
LaravelのRouting(ルーティング)とは?
Laravelを使用してWebサイトを作成する時にはRouting(ルーティング)をしないと正しくページが表示されません。Routing(ルーティング)とはリクエストされているURLに対して指定したコンテンツ(アクション)を正しく返すように処理する機能のことです。
Routing機能を使うことでトップページ以下のページの割り振りや許容するHTTPメソッドの種類、クエリパラメータの処理などリクエストの種類に応じたさまざまな適切な処理を定義することが可能になっています。
Routingを行うためのファイルはLaravelプロジェクト内のroutes
ディレクトリの中に格納されています。
Laravelプロジェクト
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
│ ├── lang/
│ ├── views/
│ └── welcome.blade.php ⇦ブレードテンプレート
├── routes/ ⇦ルーティング設定ファイル
│ ├── web.php
│ ├── api.php
│ ├── console.php
│ └── channels.php
├── storage/
├── tests/
├── vendor/
├── .env
├── artisan
├── composer.json
├── package.json
├── ...
web.php
その中の「web.php」がWebページにアクセスするための基本的なルーティング設定を記述していくファイルになります。プロジェクト作成時にデフォルトで記述されているルーティングを見てみます。
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
5行目でRoute
クラスの静的メソッド::get
を呼び出しています。1つ目の引数にはトップページ以降のパス(URL)を渡します。以下の場合は/
のみなのでトップページにアクセスされた時のルーティングが実装されています。
Route::get(パス, 関数やコントローラーアクション);
2つ目の引数には関数またはコントローラーアクションを渡します。上記の場合は無名関数の中でview('welcome')
を返しています。例えばこのような感じです。
Route::get('/item', function () {
return view('item');
});
他のファイルの役割
- web.php:基本的なWebページのルーティング
- api.php:APIのルーティング。認証機能など
- console.php:コンソール用のルーティング
- channels.php:ブロードキャスト用のルーティング
view関数
view
関数は名前の通りにViewを生成するためのメソッドです。引数にはブレードテンプレートファイル(XXXX.blade.php)の名称を指定します。
view('テンプレート名')
プロジェクト生成時にはresources/views/welcome.blade.php
が用意されているのでトップページにアクセスすることでLaraveのページが開くようになっています。
ルートパラメータを受け取る
ルーティングではURLからパラメータを受け取りViewに反映させることが可能になっています。まずは新しいルーティングを追加します。/user/{id}/{name?}
がアクセスされるパス部分であり、{id}
とすることでその部分を関数またはテンプレート側から取り出せるようになります。
Route::get('/user/{id}/{name?}', 'App\Http\Controllers\Controller@user');
また{name?}
となっているのは任意パラメータです。ここに値があれば受け取れるしなければ格納されません。これをController側で受ける際は以下のようになります。任意パラメータの箇所は初期値を格納しておきます。
public function user($id,$name = 'unknown')
{
echo "idは{$id}で、名前は{$name}です。";
}
ブレードテンプレートから受け取る
先ほどはそのまま関数に渡して表示させていましたが実際にはブレードテンプレートに渡すことが多いかと思います。ブレードテンプレートに渡すにはまずコントローラー側を以下のように変更します。
public function user($id,$name= 'unknown')
{
$data = [
'id' => $id,
'name' => $name
];
return view('index',$data);
}
メソッドの中には$data
変数を定義中に辞書形式でデータを格納しています。それをviewメソッドの第2引数に渡すことでテンプレート側に渡すことができます。テンプレート側では辞書のキー値名の変数から対象の値にアクセスできます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>idは{{$id}}名前は{{$name}}</p>
</body>
</html>
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。