В 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) }}