【发布时间】:2017-09-11 10:59:33
【问题描述】:
这个资源定义不错:
Route::resource('servers', 'ServerController');
给予:
+--------+-----------+-----------------------+-----------------+-----------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-----------------------+-----------------+-----------------------------------------------+--------------+
| | GET|HEAD | servers | servers.index | App\Http\Controllers\ServerController@index | web |
| | POST | servers | servers.store | App\Http\Controllers\ServerController@store | web |
| | GET|HEAD | servers/create | servers.create | App\Http\Controllers\ServerController@create | web |
| | GET|HEAD | servers/{server} | servers.show | App\Http\Controllers\ServerController@show | web |
| | PUT|PATCH | servers/{server} | servers.update | App\Http\Controllers\ServerController@update | web |
| | DELETE | servers/{server} | servers.destroy | App\Http\Controllers\ServerController@destroy | web |
| | GET|HEAD | servers/{server}/edit | servers.edit | App\Http\Controllers\ServerController@edit | web |
+--------+-----------+-----------------------+-----------------+-----------------------------------------------+--------------+
但我需要将它包装成一个前缀如下的组:
Route::group(['prefix' => 'servers'], function()
{
Route::resource('/', 'ServerController', ['names' => 'servers']);
});
问题来了,因为前缀参数化路由的参数是空的:
+--------+-----------+-----------------+-----------------+-----------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-----------------+-----------------+-----------------------------------------------+--------------+
| | GET|HEAD | servers | servers.index | App\Http\Controllers\ServerController@index | web |
| | POST | servers | servers.store | App\Http\Controllers\ServerController@store | web |
| | GET|HEAD | servers/create | servers.create | App\Http\Controllers\ServerController@create | web |
| | GET|HEAD | servers/{} | servers.show | App\Http\Controllers\ServerController@show | web |
| | PUT|PATCH | servers/{} | servers.update | App\Http\Controllers\ServerController@update | web |
| | DELETE | servers/{} | servers.destroy | App\Http\Controllers\ServerController@destroy | web |
| | GET|HEAD | servers/{}/edit | servers.edit | App\Http\Controllers\ServerController@edit | web |
+--------+-----------+-----------------+-----------------+-----------------------------------------------+--------------+
所以servers/1 变成了 404。有什么办法可以解决这个问题吗?
【问题讨论】:
-
要声明一个资源路由,需要将资源名称,即
servers传递给资源方法。 -
为什么要打包成组?从我可以看到它已经在一个组中。
-
@TheAlpha 是的,但在这种情况下我不能使用前缀。我已经检查了核心,并且有一个
prefixedResource方法,所以我希望如果资源的名称只是一个/,它可以使用名称的前缀。但似乎不是。顺便说一句,谢谢你的回答。 -
@PankitGami Group 因为中间件和命名空间而需要。
标签: php laravel laravel-5 routing laravel-routing