我正在制作一个包含帖子和评论的简单博客。资源Comments是Posts的嵌套资源。这是路线:
Route::resource('posts', 'PostsController');
Route::resource('posts.comments', 'CommentsController');
到目前为止,我管理所有Post Post并查看属于帖子的所有评论。
但我不知道如何为帖子创建评论。
在我的CommentsController
我有RESTful方法创建:
class CommentsController extends BaseController {
protected $comment;
public function __construct(Comment $comment)
{
$this->comment = $comment;
}
public function create($post_id)
{
return View::make('comments.create');
}
这是我的View for Comments:
@extends('master')
@section('blog')
<div class="span12 well">
<h4>Make a Comment</h4>
</div>
<div class="span12 well">
{{ Form::open(array('route' => 'comments.store')) }}
{{ Form::close() }}
</div>
@stop
但它不起作用。我收到这个错误:
无法为命名路由“comments.store”生成URL 路线不存在。
我也尝试make('route' => 'posts.comments.store'))
,我收到了这个错误:
缺少一些必需参数(“帖子”)来生成URL 路线“posts.comments.store”。
有人能帮助我吗?
编辑: 这是我的评论模型:
class Comment extends Eloquent
{
protected $guarded = array();
public function post()
{
return $this->belongs_to('Post');
}
}
这是我的帖子模型:
class Post extends Eloquent
{
protected $guarded = array();
public static $rules = array(
'title' => 'required',
'body' => 'required');
public function comments()
{
return $this->hasMany('Comment');
}
}
答案 0 :(得分:1)
具有
Route::resource('posts', 'PostsController');
Route::resource('posts.comments', 'CommentsController');
您有2个商店路线选项:
posts.store
和
posts.comments.store
但不是
comments.store
编辑:
如果您查看路线(执行php artisan routes
),您会看到到posts.comments.store的路线是:
GET /posts/{posts}/comments/create
因此,要使此路由起作用,您需要在创建特定路径的URL时传递Post id。这是您在Form::open()
中执行此操作的方式:
{{ Form::open(array('route' => array('posts.comments.store', $post_id))) }}
您还需要调整控制器,使其将帖子ID传递给您的视图:
public function create($post_id)
{
return View::make('comments.create')->with('post_id', $post_id);
}