我有一个简单的博客,包含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') }}
这是我运行索引的错误:参数&#34;评论&#34; for route&#34; posts.comments.destroy&#34;必须匹配&#34; [^ /] ++&#34; (&#34;&#34;给出)生成相应的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');
答案 0 :(得分:2)
您已在路线上放置了正则表达式测试程序,以检查您的comments
参数
此错误消息表明您提供给Laravel的参数不佳。
如果您的参数只是十进制ID,请改用\d+
regexp。
答案 1 :(得分: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文件。
修改:您已将路线定义为“资源”。这意味着您的销毁路径仅使用一个变量定义。你实际上并不需要包含$ 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();
}