CRUD Laravel 4 如何链接销毁?

2022-08-30 16:16:28

我将使用HTML链接销毁我的用户,但它似乎没有生成正确的链接,我做错了什么?

public function destroy($id)
{
    //Slet brugeren
    $e = new User($id);
    $e->destroy();

    //Log også brugeren ud
    Auth::logout();

    //redrect til forsiden
    Redirect::to("users/create");
}

在我看来,我称之为{{URL::action('UserController@destroy', array($user->id))}}


答案 1

08/21/2017 更新 Laravel 5.x

这个问题问的是Laravel 4,但我包括这个,以防人们寻找Laravel 5.x的答案最终在这里。表单助手(以及其他一些帮助程序)自 5.x 起不可用。如果您要执行 GET 或 POST 以外的操作,则仍需要在窗体上指定方法。这是当前实现该目标的方法:

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <!-- other inputs... -->
</form>

您还可以使用而不是写出隐藏的输入。{{ method_field('PUT') }}_method

查看 https://laravel.com/docs/5.4/routing#form-method-spoofing

《拉拉维尔4》的原始答案

我认为当您单击链接时,它可能会向该端点发送GET请求。Laravel中的CRUD根据REST工作。这意味着它期望的是 DELETE 请求,而不是 GET。

这是Boris Strahija的教程中的一种可能性。

    {{ Form::open(array('route' => array('admin.pages.destroy', $page->id), 'method' => 'delete')) }}
        <button type="submit" class="btn btn-danger btn-mini">Delete</button>
    {{ Form::close() }}

这样,您就可以使用 DELETE 方法以表单形式发送请求。本文解释了为什么传统链接不起作用:

您可能会注意到删除按钮位于窗体中。这样做的原因是,来自我们控制器的 destroy() 方法需要 DELETE 请求,这可以通过这种方式完成。如果按钮是一个简单的链接,请求将通过GET方法发送,我们不会调用destroy()方法。


答案 2

一个很酷的ajax解决方案是这样的:

function deleteUser(id) {
    if (confirm('Delete this user?')) {
        $.ajax({
            type: "DELETE",
            url: 'users/' + id, //resource
            success: function(affectedRows) {
                //if something was deleted, we redirect the user to the users page, and automatically the user that he deleted will disappear
                if (affectedRows > 0) window.location = 'users';
            }
        });
    }
}

<a href="javascript:deleteUser('{{ $user->id }}');">Delete</a>

在用户控制器中.php我们有这个方法:

public function destroy($id)
{
    $affectedRows  = User::where('id', '=', $id)->delete();

    return $affectedRows;
}

 


推荐