在Laravel 4中,我希望创建一组如下的宁静资源:
http://localhost/posts/1/comments
http://localhost/posts/1/comments/1
http://localhost/posts/1/comments/1/edit
...
所以我创建了两个控制器: PostsController 和 CommentsController (在同一层上),路由编写如下:
Route::resource('posts', 'PostsController');
Route::resource('posts.comments', 'CommentsController');
我还在/views/comments/index.blade.php中创建了一个链接,引用路线:posts.comments.create
{{ link_to_route('posts.comments.create', 'Add new comment') }}
这是我遇到的问题:
当我访问http://localhost/posts/1/comments
时,页面会抛出 MissingMandatoryParametersException ,表示:
缺少一些必修参数(“帖子”)来为路线“posts.comments.create”生成网址。
如何解决问题,如何知道解决方案是否也适用于CommentsController中的创建和编辑方法?
e.g。
public function index()
{
$tasks = $this->comment->all();
return View::make('comments.index', compact('comments'));
}
public function create()
{
return View::make('comments.create');
}
public function show($post_id,$comment_id)
{
$comment = $this->comment->findOrFail($comment_id);
return View::make('comments.show', compact('comment'));
}
答案 0 :(得分:7)
我在两个项目中使用嵌套控制器,喜欢它们。问题似乎出现在您的控制器和路由链接中。
在CommentsController中,缺少$ post_id。做这样的事情:
public function create($post_id)
{
return View::make('comments.create')
->with('post_id', $post_id);
}
创建指向嵌套控制器的链接时,必须提供所有祖先的ID。在这种情况下,$ post_id再次丢失。如果您的视图尚未显示,则可能必须将其提供给您。
{{ HTML::linkRoute('posts.comments.create', 'Add new comment', $post_id) }}