【问题标题】:Laravel populate checkboxes roles field with user roles on ajax edit modal formLaravel 在 ajax 编辑模式表单上使用用户角色填充复选框角色字段
【发布时间】:2019-02-21 16:33:50
【问题描述】:

嘿,伙计们,我可以从 stakoverflow 社区获得一些帮助,问题是我有一个索引视图,其中所有方法都被触发,创建方法工作正常,更新方法也工作正常,问题是什么时候编辑表单显示表示用户角色未选中的复选框,我必须重新选中复选框才能使方法更新起作用,否则它将不起作用,这是我的代码。

编辑模态:

{{ Form::open(['autocomplete' => 'off', 'id' => 'edit_user_form']) }}
    <div id="edit_user_modal" class="modal fade" role="dialog">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                    <h4 class="modal-title text-center">Actualizar Usuario</h4>
                </div>
                <div class="modal-body">
                    <div id="response"></div>
                    {{ Form::textGroup('name', 'Nombre', ['id' => 'edit_name']) }}
                    {{ Form::emailGroup('email', 'Correo Electrónico', ['id' => 'edit_email']) }}
                    {{ Form::checkboxGroup('roles', 'Roles', $roles, 'display_name', ['id' => 'edit_roles']) }}
                </div>
                <div class="modal-footer">
                    {{ Form::submit('Guardar', ['class' => 'btn btn-success']) }}
                    <button type="button" class="btn btn-default" data-dismiss="modal">Regresar</button>
                </div>
            </div>
        </div>
    </div>
    {{ Form::close() }}

编辑方法:

public function edit(Request $request)
    {
        $id = $request->input('id');

        $user = User::with('roles')->find($id);

        return response()->json($user);
    }

编辑按钮:

protected function getEditButtonAttribute()
    {
        if (Auth::user()->hasPermission('update-users')) {
            if ($this->id != 1) {
                return '<li><a href="javascript:void(0);" class="btn-edit" id="' . $this->id . '">Editar Usuario</a></li>';
            }

            return '';
        }

        return '';
    }

编辑路线:

Route::get('user/{user}', 'Auth\UserController@edit')->name('user.edit');

最后编辑脚本:

edit_name = $('#edit_name');

edit_email = $('#edit_email');

edit_roles = $('#edit_roles');

edit_user_modal = $('#edit_user_modal');

$(document).on('click', '.btn-edit', function () {
    id = $(this).attr("id");
    $.ajax({
        url: "{{ url("user") }}" + "/" + id,
        method: 'GET',
        data: {id: id},
        dataType: 'json',
        success: function (data) {
            edit_name.val(data.name);
            edit_email.val(data.email);
            edit_roles.val(data.roles);
            edit_user_modal.modal('show');
        }
    })
});

感谢您的关注。

【问题讨论】:

    标签: jquery ajax laravel forms


    【解决方案1】:

    从您的代码看来,“角色”并未在您的用户模型上定义,而是作为一种关系。如果是这种情况,您的典型表单模型绑定可能无法按预期工作。为了解决这个问题,您可以尝试为您的用户模型使用“附加”属性,并将“角色”作为附加属性包含在内。然后它将本机加载。如果这不起作用,我建议您简单地自己创建表单字段,而不是依赖于 Form 门面,因为您将对输入有更多的控制权,并且可以轻松地覆盖 Laravel 表单助手的内置功能。

    【讨论】:

    • 我为角色和权限实现了 Laratrust 包;用户、角色和权限模型都有正确的关系。
    • 我并不是说您的关系定义不正确,只是它们可能无法被表单/模型绑定识别,除非您手动将它们附加到用户模型上的 $appends 数组中。无论如何,简单地自己定义输入并没有太多额外的代码,在这种情况下,您可以完全控制功能,而不依赖于 Form 门面的“黑匣子”。这是我的建议。
    • 在您的用户模型中,尝试在类声明中添加:protected $appends = array('role');如果这不起作用,请尝试手动实现输入。我知道它会帮助你解决问题。
    • 感谢您的帮助,但它不起作用,我需要在 index 方法中获取用户的 id,有什么帮助吗?
    猜你喜欢
    • 2013-08-05
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2013-09-27
    相关资源
    最近更新 更多