【问题标题】:Route is not identified in Laravel routeLaravel 路线中未识别路线
【发布时间】: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 了。所以我是路由的基础知识。请帮帮我

【问题讨论】:

标签: php laravel routes laravel-7 laravel-route


【解决方案1】:

尝试改变:

Route::put('/todos/{$todo}/complete','TodoController@complete')->name('todos.complete');

到:

Route::put('/todos/{todo}/complete','TodoController@complete')->name('todos.complete');

没有${$todo}

请参阅:Route Parameters

【讨论】:

  • 非常感谢我现在明白了
  • @MaestroAshmin 很高兴为您提供帮助!
  • @MaestroAshmin 不要忘记接受/支持适合您问题的答案
【解决方案2】:

路由参数在 URI 中定义为 {var} 而不是 {$var}

'/todos/{todo}/complete'

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

【讨论】:

  • 非常感谢我现在明白了
猜你喜欢
  • 2014-06-18
  • 2016-12-21
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 2023-03-29
  • 1970-01-01
  • 2016-01-24
相关资源
最近更新 更多