Laravel在Ajax编辑模式表单中使用用户角色填充复选框角色字段

时间:2018-09-17 17:32:06

标签: jquery ajax laravel forms

伙计们,我可以在stakoverflow社区上使用一些帮助,问题是我有一个索引视图,所有方法均从该视图中触发,create方法也可以正常工作,update方法也可以正常工作,问题是当编辑表单会显示一个复选框,该复选框指示用户的角色未显示为选中状态,我必须重新选中该复选框以使方法更新正常工作,否则它将不起作用,这是我的代码。

编辑模式:

{{ 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');
        }
    })
});

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

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