【问题标题】:Laravel delete entry with destroy methodLaravel 使用 destroy 方法删除条目
【发布时间】:2016-08-07 10:45:14
【问题描述】:

我有一个带有删除按钮的表单,我在控制台上看到它正在发送删除请求。

jquery.js:4 DELETE http://laravel.com/painel/player/53 500 (Internal Server Error)

我的路线是:

Route::resource('painel/player','PlayerController');


| DELETE    | painel/player/{player}      | painel.player.destroy | App\Http\Controllers\PlayerController@destroy    |

我的销毁方法如下:

    public function destroy($id)
    {
            $player = Player::where('id_player', '=', $id)->first();
            $player->delete();
            $player = array(
                    'users'         => Player::all(),
                    'refresh'       => true
            );
            return View::make('painel.player.show', $player);
    }

编辑: 我忘了提到ajax:

    $( document ).on('click', '.solsoConfirm', function(){
        $("#solsoDeletForm").prop('action', $(this).attr('data-href'));
    });

    $( document ).on('click', '.solsoDelete', function(e){
        e.preventDefault();

        var solsoSelector   = $(this);
        var solsoFormAction = $('#solsoDeletForm').attr('action');

        $.ajax({
            url:    solsoFormAction,
            type:   'delete',
            cache:  false,
            dataType: 'html',
            success:function(data) {
                $('#solsoDeleteModal').modal('hide');
                $('#ajaxTable').html(data);
                $('#countClients').text( $('.solsoTable').attr('data-all') );
                $.growl.notice({ title: solsoSelector.attr('data-message-title'), message: solsoSelector.attr('data-message-success') });
                $('.solsoTable').dataTable();
            }
        }); 

        return false;
    });     

【问题讨论】:

  • 你是如何定义控制器的路由的,是资源控制器还是隐式控制器?您能否也包含您的routes.php 代码。
  • 它是一个资源控制器。这有什么区别吗?
  • 如果你有它作为一个隐式控制器,它会。无论如何,您可以将您的控制器和routes.php 完整代码发布到问题中吗?
  • 对不起,这是一个 AJAX 请求。我刚刚编辑了问题...
  • 我知道这是一个 AJAX 请求,但您必须为您正在发出的删除请求定义了 路由(很可能在文件 routes.php 中),那么你能发布它的内容以及destroy方法的完整控制器代码吗?

标签: php laravel-5.2


【解决方案1】:

虽然您的 $.ajax({ ... type: 'delete' ... }) 应该可以工作,但您需要 set up your response to accept the 'delete' method

在 Laravel 中执行 PUT、PATCH 和 DELETE 的另一种标准方法是通过 method spoofing

<form action="painel/player/{{ $id }}" method="POST">
    {{ method_field('DELETE') }}
    {{ csrf_field() }}
</form>

您的 JS 可能类似于:

var csrf = $('input[name="_token"]').val();

$.ajax({
    url: solsoFormAction,
    type: 'post',
    data: {_method: 'delete', _token: csrf},
    ...
}); 

【讨论】:

  • 顺便说一句,500 错误的实际内容可能会告诉您问题出在哪里 - 您应该能够在浏览器的开发人员工具中看到它。
  • 它不工作......开发工具只说“500(内部服务器错误)”..它说错误是在ajax方法上..如果我发送请求而不是ajax请求.. 它有效。
  • 在开发工具中,切换到网络选项卡,然后单击 POST。您应该会看到“标题”和“响应”以及其他一些内容。单击响应 - 你应该会看到 Laravel 生成的完整响应,它将描述问题。如果找不到,请检查 Laravel 日志文件。您是否更新了 AJAX 代码以发送 _method 和 _token?
猜你喜欢
  • 2021-09-23
  • 1970-01-01
  • 2017-03-27
  • 2017-09-17
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多