Laravelルーティングの全使い方基本パターンの書き方を完全伝授

Laravelのライフサイクルの記事でルートがカーネルからリクエストを受け取り、レスポンスを返すための処理を生成するコントローラーへリクエストを受け渡すのことをお伝えしました。
ルーティングはどのようなリクエスト、レスポンスを書くにしても必ず通る部分でなくてはならない部分です。
ですので、この記事では、ルートの書き方をお伝えしていきます。

ルーティングとは

ルーティングの書き方の前にそもそもルーティングとは何を指すのかを確認します。

ここでのルーティングとは、
routes ディレクトリ配下のweb,api ファイルに記載していくコードを指します。
同じroutesフォルダ内にあるconsoleはartisanコマンド、channelsコマンドはブロードキャストで使用していきます。
それぞれの使い分けについてざっくり説明すると、、

  • web
    • <基本>通常のwebアプリケーションで使用するwebインターフェースのルートを定義します。セッションの状態やCSRFの保護などの機能を提供する。
  • api
    • apiサーバーを作成する際に使用することになります。ここで定義されたルートはサービスプロバイダーによってapiがルートに初めからついたじょうたいになっています。

ルーティングの基本的な書き方

Laravelのルーティング処理は下記画に従って行います。

順に追って説明します。

Route部分

Routeはファサードですね。
config/appファイルを見るとRouteのエイリアスが定義されています。初学者のうちは、このRouteを何も定義されていないところから支えているので、魔法か何かと勘違いしてしまうのですが・・

ファサードという仕組みによって動いているのです。ファサードについてはこちらで、お話ししていますので、詳細はこちらをご確認ください。

/Illuminate/Routing/RoutingServiceProvider.php で
/Illuminate/Routing/Router.phpを結合して、インスタンス化しているのかがわかります。

メソッド名

使用したいhttpリクエストメソッドを記載していきます。
受け取りたいリクエストをどのようなメソッドを使うのかを記載してください。
下記5種を使用していきます。

get(リソースを取得する)
post(リソースを送信)
put(リソースの更新)
patch(リソースの部分的更新)
delete(リソースの削除)
options(リソースがサポートしているメソッド表示)

*optionsはプリフライトリクエストの作成時に使用することが多いです。詳しくはプリフライとリクエストについてはこちらをご覧ください。

基本的には、getとpostを使用していて問題ありません。

メソッド名例外

ここでは、メソッド名の例外について記載していきます。

リダイレクトルート

他の場所へリダイレクトしたい場合は、Route::redirectとすることでリダイレクトを実装できます。
下記のルーティングを定義した場合は、hereルートにきた際にthereルートにリダイレクトを飛ばします。

Route::redirect('/here', '/there', 301);
ビュールート

ルートからコントローラーを返さずに直接viewを返したい場合は、下記のように定義します。

Route::view('/welcome', 'welcome');

変数を渡したい場合は下記のようにすることで、
nameをキーにしてSuzukiのバリューを送ることができます。

Route::view('/welcome', 'welcome', ['name' => 'Suzuki']);

Resourcefulルート

resourceと記載することで、get,post,put,deleteのhttpメソッドとそれに対するコントローラへの処理と名前つきルートを処理することができます。

Route::resource('/sample',SamplesController);

URL

リクエストを受け取りたいurlを記載します。
初学者が落ちいりがちなのですが、urlが一致していてもメソッドが異なれば別の処理になります。注意してください。

urlからパラメータを取得したい場合

parmとしてカッコで挟みます。
コントローラー側では$parmの変数で取得することが可能です。
このパラメーターの設定は下記のようにして複数取得することができます。
下記の形でパラメーターが取得できます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SampleController extends Controller
{
    public function member($param)
    {
       dd($param)
	}
}

*ただし上記の書き方だと、必ず$paramが渡されている必要があります。
そのため、複数$paramを渡したい際に2つめはのみ$paramが存在しているという場合は、エラーが発生してしまいます。

末尾に?をつけることがパラメーターなしでも動作ができるようになります。

パラメーターに制約を設けたい場合

下記のようにすることで、正規表現の制約ができます。
制約が多すぎて煩雑になる場合は、RouteServiceProviderのbootメソッドの中に下記のように記載してください。
パターンが定義されると、指定のパラメータ名における全てのルートにおいて、自動的に処理が実行されます。

処理

ここには、メソッド、urlが一致していた場合どのような処理を実行するのかを記載します。

クロージャーで処理する場合

Route:(‘’ ,function() return)

上記のような形でクロージャを使ってレスポンスを返します。
経験だと、処理の確認をしたいときなどに使用することが多いです。

コントローラーで処理する場合

ライフサイクルを思い出していただきたいのですが、ルートの後にコントローラーを選択してレスポンスを返します。

Route:get(‘/samples’,SampleController@get);

上記のように記載することで、SampleControllerのgetメソッドで処理を行うことができます。
コントローラーの書き方についてはコントローラの記事で記載していきます。

名前付きルートとは

名前つきルートとは、下記のようにnameでルートに名前をつけることができます。

Route:get(‘/sample’,SampleController@get)->name(‘sampleget’);

その名前つきルートを使用することで、samplegetとするだけでurlを呼び出すことができます。
たとえば、redirectをしたい場合は、下記のようにredirect(‘sampleget’)とすることで、上記のようにすることで

「sampleにリクエストがきた時に、SampleControllerのgetメソッドからレスポンスを返す」というエイリアスを作ることができます。

ルートをグループ化していく

通常プロジェクトを進めていくと膨大にルートが増えてきてその管理が大変になってきます。そのため、一つ一つミドルウェア、名前空間などの処理をしていたら、エラーが増えてきます。

Laravelにはそのようなエラーを防ぐためにまとめてルートを適用するための方法があります。 順を追って一つづつ説明していきますね。

ミドルウェア

ルート中の全ルートに指定したmiddlewareを実施したい場合は下記のような表記を記載してください。

Route::middleware(['sample1', 'sample2'])->group(function () {
    Route::get('/', function () {
        // sample1とsample2ミドルウェアを使用
    });

    Route::get('user/profile', function () {
        // sample1とsample2ミドルウェアを使用
    });
});

下記のような書き方であっても同じ処理をすることができます。

Route::group(['middleware'=>'sample'])->function(){
  });

ルートプレフィックス

ミドルウェアと並びよく使うグループ化です。グループ化でまとめてプレフィックスをつけていきます。

Route::prefix('admin')->group(function () {
    Route::get('users', function () {

    });
});

下記は同じ処理をすることが可能です。

Route::group(['prexix'=>'admin'],function(){
   Route::get('users',function(){
    })
});

名前空間

ルート中の全ルートに指定した名前空間で処理したい場合は下記のような表記をしてください。

Route::namespace('admin')->group(function () {
   
});

サブドメイン

これは使い分けが難しいのですが、下記のようにサブドメインを使ってユーザーごとにドメインを変えたりというのが適応できます。
https://1234.sample.com
この1234の部分がユーザーidになります。

生成したルートの確認

下記コマンドにて生成したルートの確認ができます。
php artisan route:list

まとめ

Laravelのルートについてわかりましたか。Laravelを使う上で避けては通れない重要な部分なので、理解をしてみてくださいね。まだ紹介していないルーティングの部分もあるので、それについては今後紹介していきます。

コメントを残す