Laravel 4:为特定帖子创建评论

时间:2013-08-14 15:56:31

标签: php nested laravel laravel-4 blogs

我正在制作一个包含帖子和评论的简单博客。资源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');
    }
}

1 个答案:

答案 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);
}