はじめに
今回は自分のための備忘録なのであまり細かい解説は省略させていただきます。
ルート名プリフィックスとは
ルートグループ内の各ルートのルート名を付けるときグループ共通のプレフィックスを指定することができます。
指定するため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();
}
}
今回やりたかったこと
ルートグループの属性の指定方法はname
やprefix
といったメソッドを使う以外に、group
メソッドの第一引数に配列で渡すことでまとめて指定することもできます。
(こっちが一般的?)
しかし、以下のようにname
をキーとして属性を指定してもルート名プリフィックスは適応されません。
routes/web.php
Route::group([
'prefix' => 'hoge',
'name' => 'hoge.',
], function () {
Route::get('test', 'TestController@index')->name('test');
});
そこで処理をたどってみるとRouteRegistrar.php
に以下のような記述を見つけました。
つまりname
はas
のエイリアスなのです。
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');
});
ちなみに
name
はas
のエイリアスなのでこうやって書き換えることもできます。
routes/web.php
Route::prefix('hoge')->as('hoge.')->group(function () {
Route::get('test', 'TestController@index')->name('test');
});