0

私は Laravel 5.3、アクセス許可にEntrust、フォーム機能にLaravelCollective、選択ボックスを操作するためにChosenを使用しています。

フォームをモデルにバインドし、フォームは正しく入力されていますが、そのロール (モデル) に関連付けられた値を複数選択に入力するのに苦労しています

Entrust の組み込みの関係を活用しています。ロールに関連付けられたアクセス許可を、複数選択で選択された値として表示したいと考えています。

$role->permissions->name のようなものですが、うまくいかないようです。フォーム パラメータの null 値はデフォルト値ですが、必要なものを表示するようには見えません。

ここに私のフォームがあります:

                {!! Form::model($role, ['method' => 'PATCH', 'route' => ['settings.access.update_role', $role->id]]) !!}
                <div class="form-group">
                    {!! Form::label('Name') !!}
                    <div class="input-group">
                        <div class="input-group-addon"><i class="fa fa-plus-circle" aria-hidden="true"></i></div>
                        {!! Form::date('name', $role->name, ['class' => 'form-control']) !!}
                    </div>
                </div>
                <div class="form-group">
                    {!! Form::label('Display Name') !!}
                    <div class="input-group">
                        <div class="input-group-addon"><i class="fa fa-plus-circle" aria-hidden="true"></i></div>
                        {!! Form::date('display_name', $role->display_name, ['class' => 'form-control']) !!}
                    </div>
                </div>
                <div class="form-group">
                    {!! Form::label('Description') !!}
                    <div class="input-group">
                        <div class="input-group-addon"><i class="fa fa-plus-circle" aria-hidden="true"></i></div>
                        {!! Form::date('description', $role->description, ['class' => 'form-control']) !!}
                    </div>
                </div>
                <div class="form-group">
                    {!! Form::label('Permissions') !!}
                    <script type="text/javascript">
                        $(document).ready(function() {
                            $(".permissions").chosen({width: "100%"})
                        });
                    </script>
                    <div class="input-group">
                        <div class="input-group-addon"><i class="fa fa-user-plus" aria-hidden="true"></i></div>
                        {!! Form::select('permissions[]', $permissions, null, ['multiple' => 'multiple', 'class' => ' form-control permissions']) !!}
                    </div>
                </div>
                <div class="form-group">
                    <br/>
                    <div class="input-group">
                        <span class="input-group-btn">
                            <button class="btn btn-success" type="submit" name="add_user">Update</button>
                        </span>
                    </div>
                </div>
                {!! Form::close() !!}

問題のフォームの一部は次のとおりです。

            <div class="form-group">
                {!! Form::label('Permissions') !!}
                <script type="text/javascript">
                    $(document).ready(function() {
                        $(".permissions").chosen({width: "100%"})
                    });
                </script>
                <div class="input-group">
                    <div class="input-group-addon"><i class="fa fa-user-plus" aria-hidden="true"></i></div>
                    {!! Form::select('permissions[]', $permissions, null, ['multiple' => 'multiple', 'class' => ' form-control permissions']) !!}
                </div>
            </div>

フォームに情報を送信するコントローラー関数は次のとおりです。

public function edit_role($id)
{
    $permissions = Permission::pluck('name', 'id');
    $role = Role::where('id', $id)->first();
    return view('settings.access.edit', compact('role', 'permissions'));
}
4

2 に答える 2

0

少しハックな方法ではありますが、問題を解決することができました。

私の edit_role コントローラーは次のようになります。

public function edit_role($id)
{
    $permissions = Permission::pluck('name', 'id');
    $role = Role::where('id', $id)->first();
    $role_permissions = Role::with('perms')->get();
    $items = array();
    foreach($role_permissions as $role_permission)
    {
        foreach($role_permission->perms as $permission){
            $items[] = $permission->id;
        }
    }

    return view('settings.access.edit_role', compact('role', 'permissions', 'items'));
}

基本的に私が行ったことは、ロールに関連付けられたすべての権限を取得し、各権限の「id」を配列にキャストすることです。次に、その配列(「$ item」)を使用して、次のように選択のデフォルト値(null)を入力します。

                    <div class="form-group">
                        {!! Form::label('Permissions') !!}
                        <script type="text/javascript">
                            $(document).ready(function() {
                                $(".permissions").chosen({width: "100%"})
                            });
                        </script>

                        <div class="input-group">
                            <div class="input-group-addon"><i class="fa fa-user-plus" aria-hidden="true"></i></div>
                            {!! Form::select('permissions[]', $permissions  ,$items, ['multiple' => 'multiple', 'class' => ' form-control permissions']) !!}
                        </div>
                    </div>


于 2016-08-30T20:45:50.710 に答える