【市場価値がわかる】エンジニア転職におすすめなサイト

Laravelでルート名(URL)を取得して処理を分ける方法を解説

20代の転職ならマイナビジョブ

Laravelで指定のルート名(URL)によって処理を分けたいな….
そのためにルート名を取得するにはどうすればいいんだろう….

こんな疑問解決します。

この記事のゴールは、ルート名によって処理を分けることです。

// 登録処理の場合
if (URLがbook/storeの時) {
登録処理のバリデーション
}

// 更新処理の場合
if (URLがbook/updateの場合) {
更新処理のバリデーション
}

このようにルート名が取得できれば、バリデーションを登録・更新で分けることができます。

Contents

動作環境

Docker 20.10.7
PHP 7.4.22
Laravel 8.53.1
mySQL 5.7
データベースのツール phpmyadmin

Laravelでルート名を取得する方法

ルート名を取得するには、以下でできます。

Request::route()->getName()

そのために、Requestが使えるよう、冒頭に以下のように記述します。

※ルート名を取得し、登録処理と更新処理によってバリデーションの適用を後で分ける実装をするので、フォームリクエストでルート名を取得します。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Request; // ←←←追加

class BookRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        // ルート名の取得
        $route_name = Request::route()->getName();
        dd($route_name);
    }
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Request; // ←←←追加

class BookRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        // ルート名の取得
        $route_name = Request::route()->getName();
        dd($route_name);
    }

dd関数でデバッグし、ルート名が取得できるか確認します。

例えば、登録処理や更新処理のルーティングは以下のように記述しているので、

// 本の登録処理
Route::post('/book/store', [BookController::class, 'store'])->name('book.store');
// 本の更新処理
Route::post('/book/update/{id}', [BookController::class, 'update'])->name('book.update');

登録処理が走ると、book.storeが、更新処理が走ると、book.updateが取得できます。

ルート名によってバリデーションの適用を分ける

ここまででルート名が取得できたので、処理によってバリデーションを分けてみよう。例えば、登録処理ならこのバリデーション、更新処理ならこのバリデーションみたいに。

それでは、ルート名によって、以下のようにバリデーションを分けていきたいと思います。

// 登録処理の場合
if (URLがbook/storeの時) {
登録処理のバリデーション
}

// 更新処理の場合
if (URLがbook/updateの場合) {
更新処理のバリデーション
}

登録処理にだけ、本の名称にバリデーションをかける

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Request; // ←←←追加

class BookRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        // ルート名の取得
        $route_name = Request::route()->getName();
        $validate = [];

        if ($route_name === 'book.store') {
            $validate += [
                'book_name' => [
                    'required',
                    'max:10',
                ],
            ];
        }
        return $validate;
    }

更新処理の時は、バリデーションを適用させない

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Request; // ←←←追加

class BookRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        // ルート名の取得
        $route_name = Request::route()->getName();
        $validate = [];

        if ($route_name === 'book.update') {
            $validate += [
                'book_name' => []
            ];
        }
        return $validate;
    }
}

全体像は以下になります。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Request; // ←←←追加

class BookRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        // ルート名の取得
        $route_name = Request::route()->getName();
        $validate = [];

        if ($route_name === 'book.store') {
            $validate += [
                'book_name' => [
                    'required',
                    'max:10',
                ],
            ];
        }

        if ($route_name === 'book.update') {
            $validate += [
                'book_name' => []
            ];
        }
        return $validate;
    }
}

バリデーションについてまだ不安がある人は、以下の記事がおすすめです。

【まとめ】Laravelでルート名(URL)を取得して処理を分ける方法

今回は、ルート名を取得し、処理によってバリデーションを分ける方法について解説しました。

ピンポイントで処理が実行できれば、開発の領域も広がりますね!

このブログでは、他にも実務で役立つLaravelの記事を書いているのでぜひチェックしてみてください。

20代の転職ならマイナビジョブ

現役エンジニアに相談するならMENTA(おすすめ)

スキルを売り買いするならココナラ

動画教材ならUdemy

コメント

コメントする

CAPTCHA


Contents
閉じる