我一直在尝试学习 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 了。所以我是路由的基础知识。请帮帮我