Laravel 使用 destroy 方法删除条目
Posted
技术标签:
【中文标题】Laravel 使用 destroy 方法删除条目【英文标题】:Laravel delete entry with destroy method 【发布时间】: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方法的完整控制器代码吗?
【参考方案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?以上是关于Laravel 使用 destroy 方法删除条目的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 中的 destroy() 和 delete() 方法有啥区别?
没有 id 的 Laravel 资源路由销毁(DELETE)
如何在 Destroy 函数中删除具有多个参数的数据 - Laravel