我刚刚在Laravel中创建了一个类似于待办事项列表的新项目。当我尝试进行简单删除时,出现此错误:
缺少[Route:destroy] [URI:{}]所需的参数。 (查看:C:... \ resources \ views \ index.blade.php)
这是 index.blade.php 中代码的一部分:
@if($todos)
<ol>
@foreach($todos as $todo)
<li>{{ $todo->todo }}</li>
<form action="" method="post">
@csrf
@method('Delete')
<a href="{{ route('destroy', ['id' => $todo->id]) }}" class="btn btn-danger">x</a>
</form>
@endforeach
</ol>
@endif
所以我只是检查是否有东西,如果没有,则不显示列表。
控制器中的部分代码:
public function index()
{
$todos = Todo::all();
return view('index', ['todos' => $todos]);
}
public function destroy($id)
{
Todo::findOrFail($id)->delete();
}
和 web.php 中的代码行:
Route::resource('/', 'TodosController');
这是如此基本,这使我发疯,因为我不知道是什么导致了此错误。似乎一切都很好。
答案 0 :(得分:0)
您实际上并未提交表格。您只需单击一个链接即可,从本质上讲,您发出的是GET请求,而不是POST请求。
您需要通过表格发送它。
@foreach($todos as $todo)
<li>{{ $todo->todo }}</li>
<form action="{{ route('destroy', $todo->id) }}" method="POST">
@csrf
@method('DELETE')
<input type="submit" class="btn btn-danger" value="x" />
</form>
@endforeach
具有这样的内联表单可能会显得有些奇怪,因此您可以将按钮放在外面,然后单击提交表单。
@foreach($todos as $todo)
<li>
{{ $todo->todo }}
<a href="#" class="btn btn-danger"
onclick="event.preventDefault();
document.getElementById('todo-destroy-{{ $todo->id }}').submit();">x</a>
</li>
<form action="{{ route('destroy', $todo->id) }}" method="POST" id="todo-destroy-{{ $todo->id }}">
@csrf
@method('DELETE')
</form>
@endforeach
答案 1 :(得分:0)
不确定100%,但是尝试将资源路由声明更新为:
Route::resource('todos', 'TodosController');
并将您的链接更改为
<a href="{{ route('todos.destroy', ['todo' => $todo->id]) }}" class="btn btn-danger">x</a>
在此处的文档中,https://laravel.com/docs/5.7/controllers#restful-naming-resource-route-parameters
他们将路线描述为:
资源控制器处理的操作
删除/ photos / {photo}销毁photos.destroy
答案 2 :(得分:0)
Quirel,您的回答解决了我这个错误,但是现在它并没有删除我的“帖子”。它只是显示页面“未找到-404”。我已经尝试过修补程序,这一行代码应该可以工作。
代码:
public function destroy($id)
{
$todo = Todo::findOrFail($id);
$todo->delete();
return redirect('/');
}
您还可以向我解释为什么作为第二个参数我们只发送$ todo-> id而不发送['id'=> $ todo-> id]吗?