LoginSignup
1
0

More than 3 years have passed since last update.

Laravelのルートグループにルート名プリフィックスを指定する方法

Last updated at Posted at 2020-01-04

はじめに

今回は自分のための備忘録なのであまり細かい解説は省略させていただきます。

ルート名プリフィックスとは

ルートグループ内の各ルートのルート名を付けるときグループ共通のプレフィックスを指定することができます。
指定するためnameメソッドを利用します。

公式ドキュメントを参考に以下のように指定すれば、http://localhost/hoge/test/にアクセスするとhoge.testと表示されます。

routes/web.php
Route::prefix('hoge')->name('hoge.')->group(function () {
    Route::get('test', 'TestController@index')->name('test');
});
app\Http\Controllers\TestController.php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class TestController extends Controller
{
    public function index () {
        // ルート名を表示
        echo \Route::current()->getName();
    }
}

今回やりたかったこと

ルートグループの属性の指定方法はnameprefixといったメソッドを使う以外に、groupメソッドの第一引数に配列で渡すことでまとめて指定することもできます。
(こっちが一般的?)

しかし、以下のようにnameをキーとして属性を指定してもルート名プリフィックスは適応されません。

routes/web.php
Route::group([
    'prefix' => 'hoge',
    'name' => 'hoge.',
], function () {
    Route::get('test', 'TestController@index')->name('test');
});

そこで処理をたどってみるとRouteRegistrar.phpに以下のような記述を見つけました。
つまりnameasのエイリアスなのです。

vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php

    /**
     * The attributes that are aliased.
     *
     * @var array
     */
    protected $aliases = [
        'name' => 'as',
    ];

よってルートグループの指定をこうやって書き換えることでルート名プリフィックスが想定通りに指定できました。

routes/web.php
Route::group([
    'prefix' => 'hoge',
    'as' => 'hoge.',
], function () {
    Route::get('test', 'TestController@index')->name('test');
});

ちなみに

nameasのエイリアスなのでこうやって書き換えることもできます。

routes/web.php
Route::prefix('hoge')->as('hoge.')->group(function () {
    Route::get('test', 'TestController@index')->name('test');
});

参照

ルート名プリフィックス - Laravel 6.x

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0