【问题标题】:PostsController@destroy not defined in LaravelLaravel 中未定义 PostsController@destroy
【发布时间】:2017-11-05 12:33:07
【问题描述】:

遇到此错误,我们将不胜感激。我得到的错误如下:

Action App\Http\Controllers\PostsController@destroy 未定义。 (查看:C:\xampp\htdocs\lsapp\resources\views\posts\show.blade.php)

我在 PostsController 中确实有“销毁”方法,并使用了 Laravel 的最新版本。

{!!Form::open(['action' => ['PostsController@destroy', $post->id], 'method' => 'POST', 'class' => 'pull-right'])!!}
    {{Form::hidden('_method', 'DELETE')}}
    {{Form::submit('Delete', ['class' => 'btn btn-danger'])}}
{!!Form::close()!!}

【问题讨论】:

  • 尝试写App\Http\Controllers\PostsController@destroy而不是PostsController
  • 谢谢,但试过了,没有运气。
  • 排序后的 PostController@destroy 应该是。
  • 所以你只是有一个“s”太多“PostsController”而不是“PostController”?
  • 是的,Typo 应该是 PostController。

标签: php laravel methods


【解决方案1】:

试试这个。 我将 ACTION 更改为 URL。

    {!!Form::open(['url' => ['posts', $post->id], 'method' => 'POST', 'class' => 'pull-right'])!!}
        {{Form::hidden('_method', 'DELETE')}}
        {{Form::submit('Delete', ['class' => 'btn btn-danger'])}}
    {!!Form::close()!!}

【讨论】:

    【解决方案2】:

    语法在 laravel 版本中经常变化。所以总是检查你的版本。 现在我想你可能正在使用 Laravel 5.4.36 或其他版本。 所以我想尝试将“ACTION”更改为“URL”,如下所示。

    {!!Form::open(['url' => ['PostsController@destroy', $post->id], 'method' => 'POST', 'class' => 'pull-right'])!!}
        {{Form::hidden('_method', 'DELETE')}}
        {{Form::submit('Delete', ['class' => 'btn btn-danger'])}}
    {!!Form::close()!!}
    

    【讨论】:

      【解决方案3】:

      您的action 方法与您编写它的方式一样好。该错误实际上意味着您没有名为 PostsController@destroy 的控制器。

      只要运行:

      php artisan route:list
      

      如果控制器存在,name 列将为您提供前缀和方法 Post.destroy,在同一行中,action 列将为您提供控制器名称 PostsController@destroy。显然,如果这两个条件不存在;你得到错误:

      Action App\Http\Controllers\PostsController@destroy not defined.

      【讨论】:

      • 这是一个非常相关的解释。谢谢
      【解决方案4】:

      您可以尝试使用 actionaction('WelcomeController@log_in') 这样的辅助函数,或者您可以将操作设置为为您提供控制器的路由。

      【讨论】:

        【解决方案5】:

        你错过了一步。

        回想一下 html 表单中的 action 属性是什么样子的:

        action="{{ you put a url here, not a controller action }}"
        

        然后考虑您的路由文件,您应该在上面添加您决定在{{ }} 中引用的任何路由,并将其映射到您的控制器操作在路由文件中

        我建议不要使用 Form:: 这样做,那样你会更好地理解它(而且它不会更复杂)。

        【讨论】:

        • 您好,不知道您所说的没有 Form:: 是什么意思?
        • Form:: 只是生成html,即
          ...
          。自己写instead
        【解决方案6】:

        只是您需要更改表单中的方法表单以像这样删除:

        {!!Form::open(['action' => ['PostsController@destroy', $post->id], 'method' => 'DELETE', 'class' => 'pull-right'])!!}
            {{Form::hidden('_method', 'DELETE')}}
            {{Form::submit('Delete', ['class' => 'btn btn-danger'])}}
        {!!Form::close()!!}
        

        【讨论】:

        • 谢谢你试过了,但还是一样的错误信息,谢谢你的建议。
        【解决方案7】:

        在 Laravel 8 中需要完整的路线描述如下:

        {!!Form::open(['action' => ['App\Http\Controllers\PostsController@destroy', $post->id], 
        'method' => 'POST', 'class' => 'float-right'])!!}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-19
          • 1970-01-01
          • 1970-01-01
          • 2021-04-21
          • 2017-07-07
          相关资源
          最近更新 更多