【发布时间】:2020-11-05 23:53:33
【问题描述】:
我一直在尝试学习 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 未找到错误:
http://127.0.0.1:8000/todos/1/complete
我已经有一段时间没有做 laravel 了。所以我是路由的基础知识。请帮帮我
【问题讨论】:
-
路由参数不使用
$...在'/todos/{$todo}/complete',应该是'/todos/{todo}/complete'。 laravel.com/docs/7.x/routing#route-parameters
标签: php laravel routes laravel-7 laravel-route