Laravel 4: как написать правильный вложенный контроллер для вложенного ресурса?

В 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 , указывая:

Некоторые обязательные параметры отсутствуют («посты») для создания URL-адреса маршрута «posts.comments.create».

Как я могу исправить проблему и как узнать, применимо ли решение для методов создания и редактирования в CommentsController?

например

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

    Я использую вложенные контроллеры в двух проектах, люблю их. Проблема, похоже, в вашем контроллере и маршрутной ссылке.

    В CommentsController отсутствует $ post_id. Сделайте что-то вроде этого:

     public function create($post_id) { return View::make('comments.create') ->with('post_id', $post_id); } 

    При создании ссылок на вложенный контроллер должны быть указаны идентификаторы всех предков. В этом случае $ post_id снова отсутствует. Возможно, вам придется сделать это доступным для вашего просмотра, если оно еще не сделано.

     {{ HTML::linkRoute('posts.comments.create', 'Add new comment', $post_id) }}