【问题标题】:delete in laravel with get using Route::resource()在 laravel 中使用 Route::resource() 删除
【发布时间】:2016-02-18 06:31:21
【问题描述】:

我正在尝试使用 GET 而不是 DELETE 在 laravel 中删除,因为我的共享服务器不支持 DELETE 动词。

所以,我使用了Jeffrey Way's method

东西在我的 routes.php 中,我用

 Route::resource('users', 'UserController');

例如。

所以,当我对资源使用 GET 而不是 DELETE 时,系统认为我将使用 show 方法,而不是 destroy 方法。

我看到的唯一方法是不使用资源方法来路由,并详细说明我的所有路由,但我不喜欢它,阅读起来有点沉重。

有没有办法继续使用 resource() 并有自定义的销毁路线?

发送!

【问题讨论】:

    标签: php laravel-5.1 laravel-routing


    【解决方案1】:

    HTML 表单实际上不支持PUTPATCHDELETE 操作;他们只支持GETPOST 请求。

    相反,Laravel 欺骗了该方法,允许您使用隐藏的 _method 字段来使用这些,您可以在 docs 中阅读。

    使用Route::resource 会自动将DELETE 方法路由到控制器中的destroy 函数。

    如果您使用的是Form helpers,那么您可以在Form::open() 中使用以下内容来指定删除方法:

    {!! Form::open(['method' => 'DELETE']) !!}

    如果你不是,那么你可以简单地将它像{{ method_field('DELETE') }} 那样包含在你的 HTML 表单中。

    如果您不欺骗它并使用 GET 请求,那么 Route::resource 会将其与控制器中的 show 函数相关联。

    使用按钮执行此操作

    {!! Form::open(['method' => 'DELETE']) !!}
    {!! Form::submit('Delete') !!}
    {!! Form::close() !!}
    

    【讨论】:

    • 我使用的是链接而不是表单:删除
    • 你不能使用链接,它必须是一个表单 - 但你可以做一些其他的事情让它显示为一个按钮 - 上面编辑中的例子。
    • 我的立场是正确的,无论哪种方式,当您点击链接时,您正在发送 GET 请求,Route::resource 不会接收到它。
    • 没有。我发现不描述所有路由的唯一方法是在 show 方法中插入删除代码,如果我需要显示对象的详细信息,则添加额外的路由......这就是我写这篇文章的原因
    【解决方案2】:

    一种选择是使用Route::resourceexcept 参数并根据需要自定义例外路由。

    例子:

    Route::resource('product, 'ProductController', ['except' => ['destroy']]); Route::get('product/{id}/destroy','ProductController@destroy');

    还没有找到更好的解决方案。

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 2019-06-14
      • 2014-06-23
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 2018-11-06
      相关资源
      最近更新 更多