使用laravel纠正Restful资源

时间:2014-12-30 13:54:57

标签: php rest laravel

所以这是一个简单的问题,我已经找到了答案,但找不到任何解释在路线中写资源的正确方法的东西。

我将解释我的困境: 假设你有一个扩展它的UserController和PostController:

PostController extends UserController

现在我明白在routes文件中写入资源的正确方法是:

//restful:
Route::resource('user', 'UserController');
Route::resource('user.post', 'PostController');

但是当我这样做时,我的工匠路线看起来像这样:

GET|HEAD user/{user}/post             | user.post.index      | PostController@index
GET|HEAD user/{user}/post/create      | user.post.create     | PostController@create
POST user/{user}/post                 | user.post.store      | PostController@store
GET|HEAD user/{user}/post/{post}      | user.post.show       | PostController@show
GET|HEAD user/{user}/post/{post}/edit | user.post.edit       | PostController@edit
PUT user/{user}/post/{post}           | user.post.update     | PostController@update
PATCH user/{user}/post/{post}         |                      | PostController@update
DELETE user/{user}/post/{post}        | user.post.destroy    | PostController@destroy

意思是我需要通过路由发送2个参数,这一切都没问题,但是当我编写PostController时,我遇到了这个问题:

'ErrorException' with message 'Declaration of PostController::show() should be compatible with UserController::show($id)'

我的问题是,如果PostController show和UserController的声明显示,我应该如何传递2个参数?应该是一样的吗?

1 个答案:

答案 0 :(得分:1)

您的PostController没有理由延长UserController

此处的实际问题是PostController::show()UserController::show()的签名不匹配。如果您正在注射模型,那么可能是因为一个人有Post而另一个User,或者你的模型名称是什么。