所以这是一个简单的问题,我已经找到了答案,但找不到任何解释在路线中写资源的正确方法的东西。
我将解释我的困境: 假设你有一个扩展它的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个参数?应该是一样的吗?
答案 0 :(得分:1)
您的PostController
没有理由延长UserController
。
此处的实际问题是PostController::show()
和UserController::show()
的签名不匹配。如果您正在注射模型,那么可能是因为一个人有Post
而另一个User
,或者你的模型名称是什么。