2019年09月23日 18:15
Laravel ではコントローラーを生成する際に resources と指定することで簡単に CRUD の機能をもたせることが可能で、自動的にルートに対して名前を付与してくれます。
例えば UserController が resources で登録されているとき、php artisan route:list
を確認すると以下のようになっています(一部省略)。
Laravel で Future テストを行う際には直接 URI を指定することも可能ですが、name がついている場合 name で指定することも可能です。
// uri指定
$response = $this->post('users/store'), $data);
// name指定
$response = $this->post(route('users.store'), $data);
今回管理者がユーザのデータを編集できることをテストするために、admin という prefix のついた UserController の Name を指定していたのですが、データベースに登録する部分でエラーが出てしまいました。
Route::group(['prefix' => 'admin'], function () {
Route::resource('users', 'UserController');
});
方法を変えて URI の指定(admin/users)も試しましたが、こちらはルート定義がなされてないといういうエラー。どうしようかと調べていたところ、prefix をつけただけでは Name には反映されないようです。
Laravel 5.3 resource での名前付き route の変更 – ララジャパン
URI だけではなく Name にも反映させるにはグループ化で'as' => '{prefix}.'
と指定することが必要でした。
Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () {
Route::resource('users', 'UserController');
});
これで prefix のグループ化を行ったルートにも Name 指定でアクセスすることができるようになります。
p { margin-bottom: 1em; } blockquote p { margin-bottom: initial; } #content ul { padding-left: 40px; } .token.operator { background-color: initial; }