1

我正在制作一个包含帖子和评论的简单博客。资源评论是帖子的嵌套资源。这是路线:

Route::resource('posts', 'PostsController');
Route::resource('posts.comments', 'CommentsController');

到目前为止,我管理所有 Post crud 并查看属于某个帖子的所有评论。

但我不知道如何为帖子创建评论。

在我的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');
}

这是我为评论创建的视图:

@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'))并收到此错误:

缺少一些强制参数(“posts”)来生成路由“posts.comments.store”的 URL。

有人能帮助我吗?

编辑:这是我的评论模型:

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');
    }
}
4

1 回答 1

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);
}
于 2013-08-14T16:02:10.633 回答