Laravel入門#05(ルーティング)




cocomaruです。

今まではToDoアプリという簡易なアプリを実装して、Laravelのざっくりとした使い方を説明していきましたが、
本記事からは一つ一つ仕組みについて説明していきたいと思います。

ルーティングについて

Laravelには「特定のアドレスにアクセスした場合、どの処理を呼び出して実行するか」を制御する仕組みがあり、それを「ルーティング」と呼びます。

このルーティングの仕組みを知っておくとLaravelを使って、どのように処理をさせればいいのかの、流れがわかるようになるため、しっかりと理解していきましょう。

「routes」ディレクトリについて

ルーティングについての設定に関しては、プロジェクトディレクトリ直下にある「routes」ディレクトリの中のファイル群が該当します。

api.php アプリケーションのAPIのルーティングを登録します。「api」ミドルウェアグループが割り当てられます。
channels.php ブロードキャストチャンネルを扱うためのルーティングファイルになります。
console.php コンソールプログラムを扱うためのルーティングファイルになります。
web.php WEBページとしてアクセスするためのルーティングを登録します。

いくつかありますが、今回は「routes/web.php」を扱っていきます。

ルーティングを設定してみよう。

それではweb.phpを開いてみてください。

Laravel5.6だと中身は以下のようになっています。

routes/web.php
//...
Route::get('/', function () {
    return view('welcome');
});
//...

これはURLのドキュメントルートにアクセした場合、「resources/views/welcome.blade.php」をレンダリングしたものを表示するという処理になっています。

viewルート

上記のルート定義は、viewルートを使っても代替可能です。

routes/web.php
Route::view('/', 'welcome');

中身を変更してみよう

ではソースの中身を以下のように変更してみましょう。

routes/web.php
Route::get('/', function () {
    return 'Hello World';
});

変更したら、ブラウザで「http://localhost:8000/」とURLをうってアクセスしてみてください。
「Hello Wolrd」とテキストが表示されたかと思います。

ルーティングを追加してみよう

では、次にルーティングを追加してみましょう!

routes/web.php
// 追加
Route::get('add', function () {
    return 'Add Page';
});

上記のように追加したら、「http://localhost:8000/add」へアクセスしてみましょう。
今度はreturnの返却値の通り、「Add Page」と表示されたかと思います。

このようにシンプルな書き方で、ルーティングを設定することができます^^

リダイレクトルート

Laravelではリダイレクトの機能も備わってます。

routes/web.php
//「http://localhost:8000/old」へアクセスすると、「http://localhost:8000/new」へリダイレクトされる
Route::redirect('/old', '/new', 301);

ルートパラメータ

URLのセグメントから値を取り出す方法についてみていきます。

例えば、「/posts/1」というアドレスでアクセスされた際、「1」の数字を取り出して処理したい時、以下のように定義します。

routes/web.php
Route::get('posts/{post}', function ($postId) {
    return 'post id is '. $postId;
});

「http://localhost:8000/posts/1/」でアクセスすると、「1」の値が表示されるかと思います。

複数のルートパラメータ値も取得できる

またルートパラメータは複数設定できます。

routes/web.php
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    return 'post id is '. $postId . ' comment id is ' . $commentId;
});

任意のルートパラメータ

中には必須ではないルートパラメータも指定したい場合があるかと思いますが、その場合は「{name?}」とパラメータの末尾に「」をつけてください。

routes/web.php
Route::get('user/{name?}', function ($userName='no name') {
    return 'Hello '. $userName;
});

正規表現制約

ルートにwhereメソッドを使って、フォーマットの制約をかけることもできます。

routes/web.php
// nameは英字のみ
Route::get('user/{name}', function ($name) {
//
})->where('name', '[A-Za-z]+');

// idは0-9の数字のみ
Route::get('user/{id}', function ($id) {
//
})->where('id', '[0-9]+');

// idは数字、nameは英字のみ
Route::get('user/{id}/{name}', function ($id, $name) {
//
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

公式サイトから抜粋


これまで紹介した制御以外に、ルーティングに対して名前を設定できたり、ミドルウェアの設定と様々な設定が可能ですので、
気になる方は公式サイトを参照してください。

以上でルーティングの基本的な使い方の説明を終わります。

ここまでお読み頂きありがとうございました!









コメントを残す

メールアドレスが公開されることはありません。