0

Post リソースと Comment ネストされたリソースを含む単純なブログがあります。今までは、投稿に属するすべてのコメントを表示し、投稿の新しいコメントを作成できました。

特定のコメントを削除できるようにしたいのですが、どういうわけか間違いを犯しています。

これは、comments.indexすべてのコメントを含むビューです。

@extends('master')

@section('blog')

@foreach($comments as $comment)
  <div class="span11 well">
    <ul>
        <li><strong>Body: </strong> {{ $comment->body }} </li>
        <li><strong>Author: </strong> {{ $comment->author }}</li>
    </ul>

{{ Form::open(array('method' => 'DELETE', 'route' => array('posts.comments.destroy', $post_id), $comment->id)) }}

{{ Form::submit('Delete', array('class' => 'btn btn-danger')) }}

{{ Form::close() }}

 </div>
@endforeach
{{ link_to_route('posts.index', 'Back to Post index') }}

これは、インデックスを実行しているときに発生するエラーです。ルート「posts.comments.destroy」のパラメーター「コメント」は、対応する URL を生成するために「[^/]++」(「」が指定) と一致する必要があります。

これは CommentsController 内の Index メソッドです。

public function index($post_id)
{
    $comments = Post::find($post_id)->comments;
    return View::make('comments.index', compact('comments'))->with('post_id', $post_id);
}

これは、CommentsController 内の Destroy メソッドです。

public function destroy($post_id, $comment_id)
{
    $comment = $this->comment->find($comment_id)->delete();

    return Redirect::route('posts.comments.index', $post_id);
}

誰かが私がどこで間違いを犯しているのか教えてもらえますか?

これはルートです:

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

2 に答える 2

2

commentsパラメータをチェックするために、正規表現テスターをルートに配置しました。
このエラー メッセージは、Laravel に指定したパラメーターが不適切であることを示しています。

パラメータが 10 進数の ID のみの場合は、\d+代わりに regexp を使用してください。

于 2013-08-16T07:43:51.113 に答える
0

あなたの routes.php ファイルがなければ - 確かではありませんが、これが問題かもしれません。

変化する

{{ Form::open(array('method' => 'DELETE', 'route' => array('post.comments.destroy', $post_id), $comment->id)) }

{{ Form::open(array('method' => 'DELETE', 'route' => array('post.comments.destroy', array ($post_id, $comment->id))) }

これが機能しない場合は、routes.php ファイルを投稿してください。

編集:ルートを「リソース」として定義しました。これは、破棄ルートが 1 つの変数のみで定義されていることを意味します。実際には $post を含める必要はないので、次のように定義してください:

{{ Form::open(array('method' => 'DELETE', 'route' => array('posts.comments.destroy', $comment->id))) }}

destroy メソッドを次のように変更します。$post で $comment を削除する必要はありません。

public function destroy($comment_id)
{
    $comment = $this->comment->find($comment_id)->delete();

    return Redirect::back();
}
于 2013-08-16T07:44:22.387 に答える