4

Laravel 4 では、次のように一連の安らかなリソースを作成したいと考えています。

http://localhost/posts/1/comments   
http://localhost/posts/1/comments/1 
http://localhost/posts/1/comments/1/edit

...ということで、 PostsControllerCommentsController
の 2 つのコントローラーを(同じレイヤーに) 作成し、ルートは次のように記述します。

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

ここに私が会った問題があります:

にアクセスすると、ページでMissingMandatoryParametersExceptionhttp://localhost/posts/1/commentsがスローされ、次のことが示されます。

ルート「posts.comments.create」の URL を生成するためのいくつかの必須パラメーター (「posts」) が欠落しています。

問題を解決するにはどうすればよいですか? また、この解決策が CommentsController の create メソッドと edit メソッドにも適用されるかどうかを知るにはどうすればよいですか?

例えば

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

    }
4

1 に答える 1

7

私は 2 つのプロジェクトでネストされたコントローラーを使用しています。問題はコントローラーとルート リンクにあるようです。

CommentsController に $post_id がありません。次のようにします。

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

ネストされたコントローラーへのリンクを作成するときは、すべての祖先の ID を提供する必要があります。この場合、$post_id が再び欠落しています。まだ使用していない場合は、ビューで使用できるようにする必要がある場合があります。

{{ HTML::linkRoute('posts.comments.create', 'Add new comment', $post_id) }}
于 2013-05-20T11:27:04.277 に答える