首页 > 解决方案 > 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 了。所以我是路由的基础知识。请帮帮我

标签: phplaravelrouteslaravel-7laravel-route

解决方案


路由参数在 URI 中定义为{var}not {$var}

'/todos/{todo}/complete'

route('todos.complete', ['todo' => $todo->id])

推荐阅读