php - Laravel 路线中未识别路线
问题描述
我一直在尝试学习 laravel,但由于某种原因,在我需要传递 id 等路由参数的情况下,我的路由没有被特别识别。这是我的 web.php
Route::put('/todos/{$todo}/complete','TodoController@complete')->name('todos.complete');
Route::resource('/todos','TodoController');
这是我打电话给这条路线的地方
@foreach($todos as $todo)
<li class="flex justify-between p2">
@if($todo->completed)
{{-- <p><del>{{$todo->title}}</del></p> --}}
<p class="line-through">{{$todo->title}}</p>
@else
<p>{{$todo->title}}</p>
@endif
<div>
<a href="{{route('todos.edit',[$todo->id])}}" class="btn btn-primary"><i class="fa fa-edit"></i></a>
@if(!$todo->completed)
<span onclick="event.preventDefault();document.getElementById('form-complete-{{$todo->id}}').submit()" class="btn btn-danger fa fa-check px2" ></span>
<form action="{{route('todos.complete',$todo->id)}}" id="{{'form-complete-'.$todo->id}}" method="post" style="display:none">
@csrf
@method('put')
</form>
@else
<span onclick="event.preventDefault();" class="btn btn-success fa fa-check px2" ></span>
<form action="{{route('todos.complete',$todo->id)}}" method="post" style="display:none">
@csrf
@method('put')
</form>
@endif
</div>
</li>
@endforeach
我已经按如下方式设置了我的控制器:
public function complete(Todo $todo){
$todo->update(['completed'=>true]);
return redirect()->back()->with('message','Todo Completed');
}
这是我的路线:
| PUT | todos/{$todo}/complete | todos.complete | App\Http\Controllers\TodoController@complete | web
我在需要传递参数的编辑后路由中遇到了类似的问题。在那里,我只是使用资源方法解决了。但在这种情况下,由于我必须在控制器中输入自定义函数,所以路由不可用。我在以下位置遇到 404 not found 错误:
http://127.0.0.1:8000/todos/1/complete
我已经有一段时间没有做 laravel 了。所以我是路由的基础知识。请帮帮我
解决方案
路由参数在 URI 中定义为{var}
not {$var}
:
'/todos/{todo}/complete'
route('todos.complete', ['todo' => $todo->id])
推荐阅读
- javascript - 我可以使用javascript向我的SVG添加渐变,使用对象标签加载它吗?
- docker - Docker - 我可以为 DockerHub 提供一个 docker-compose.yml 吗?
- javascript - Sequelize 无法通过关联创建
- flurry-analytics - 来自flurry-analytic的事件日志现在消失了
- visual-studio-code - Conda 在 VSC 中未被识别为命令
- oracle - 如何分组或仅获取某行的一条记录(QUERY)
- c++ - 重新定义要在函数中使用的静态变量 - 有没有更好的方法?
- javascript - 如何解析由有符号 8.8 定点表示法表示的十六进制值?(JavaScript)
- java - 我怎样才能获得 Java 12
- spring-boot - SpringBoot 调度器表达式每天运行两次