Как сохранить несколько флажков с другим именем?(Laravel) - PullRequest
0 голосов
/ 10 мая 2019

Привет, у меня проблема при сохранении нескольких флажков с другим именем. У меня есть разрешение на создание для меню, и меню имеют разные права доступа, такие как создание, чтение, обновление, удаление и т. Д.

Я пытаюсь использовать этот код, но получаюнедопустимый результат

Вот мой шаблон лезвия

<div class="table-responsive">
    <table id="bs4-table" class="table table-striped table-bordered" style="width:100%">
        <thead>
            <tr>
                <th>No</th>
                <th>Menu</th>
                <th>Create</th>
                <th>Read</th>
                <th>Update</th>
                <th>Delete</th>
                <th>Approve</th>
                <th>Export PDF</th>
                <th>Export Excel</th>
            </thead>
            <tbody>
                @foreach ($permission_menus as $permission_menu)
                   <tr>
                       <td>{{ $loop->iteration }}</td>
                       <td>
                           {{ $permission_menu->name }} <input type="checkbox" name="menus_id[]" value="{{ $permission_menu->id }}">
                       </td>
                       <td>
                           <input type="checkbox" name="create_access[]" value="0" onclick="changeFlag(this)">
                       </td>
                       <td>
                           <input type="checkbox" name="read_access[]" value="0" onclick="changeFlag(this)">
                       </td>
                       <td>
                           <input type="checkbox" name="update_access[]" value="0" onclick="changeFlag(this)">
                       </td>
                       <td>
                           <input type="checkbox" name="delete_access[]" value="0" onclick="changeFlag(this)">
                       </td>
                       <td>
                           <input type="checkbox" name="approve_access[]" value="0" onclick="changeFlag(this)">
                       </td>
                       <td>
                           <input type="checkbox" name="export_pdf_access[]" value="0" onclick="changeFlag(this)">
                       </td>
                       <td>
                           <input type="checkbox" name="export_excel_access[]" value="0" onclick="changeFlag(this)">
                       </td>
                   </tr>
               @endforeach
           </tbody>
       </table>
   </div>

А вот мой метод хранения

    public function store(Request $request)
    {
        $this->validate($request, [
            'user_access' => 'required',
        ], [
            'user_access.required' => 'User harus dipilih!',
        ]);

        $index = 0;

        foreach($request->menus_id as $menu_id)
        {
            $create_access = $request->create_access;
            $read_access = $request->read_access;
            $update_access = $request->update_access;
            $delete_access = $request->delete_access;
            $approve_access = $request->approve_access;
            $export_pdf_access = $request->export_pdf_access;
            $export_excel_access = $request->export_excel_access;


            if (!isset($create_access[$index])) {
                $create_access[$index] = 0;
            }

            if(!isset($read_access[$index])){
                $read_access[$index] = 0;
            }

            if(!isset($update_access[$index])){
                $update_access[$index] = 0;
            }

            if(!isset($delete_access[$index])){
                $delete_access[$index] = 0;
            }

            if(!isset($approve_access[$index])){
                $approve_access[$index] = 0;
            }

            if(!isset($export_pdf_access[$index])){
                $export_pdf_access[$index] = 0;
            }

            if(!isset($export_excel_access[$index])){
                $export_excel_access[$index] = 0;
            }



            $permission = [
                'menu_id' => $menu_id,
                'create_access' => $create_access[$index],
                'read_access' => $read_access[$index],
                'update_access' => $update_access[$index],
                'delete_access' => $delete_access[$index],
                'approve_access' => $approve_access[$index],
                'export_pdf_access' => $export_pdf_access[$index],
                'export_excel_access' => $export_excel_access[$index],
                'user_id' => $request->user_id,
                'user_access' => $request->user_access
            ];


            DB::table('permissions')->insert($permission);

            $index++;
        }

        return redirect()->back()->with('success', 'Hak akses berhasil di set!');
    }

Кто-нибудь знает, как это исправить?Или есть идеи как это исправить?

1 Ответ

0 голосов
/ 10 мая 2019

Если вы снимите флажок с одного из пунктов меню, не снимая все разрешения в этом меню, вы получите противоречивые результаты. Вы всегда можете принудительно ввести идентификатор в качестве индекса меню:

<div class="table-responsive">
    <table id="bs4-table" class="table table-striped table-bordered" style="width:100%">
        <thead>
        <tr>
            <th>No</th>
            <th>Menu</th>
            <th>Create</th>


            <th>Read</th>
            <th>Update</th>
            <th>Delete</th>
            <th>Approve</th>
            <th>Export PDF</th>
            <th>Export Excel</th>
        </tr>
        </thead>
        <tbody>
        @foreach ($permission_menus as $permission_menu)
        <tr>
            <td>{{ $loop->iteration }}</td>
            <td>
                {{ $permission_menu->name }} <input type="checkbox" name="menus_id[]"
                                                    value="{{ $permission_menu->id }}">
            </td>
            <td>
                <input type="checkbox" name="create_access[{{$permission_menu->id}}]" value="0" onclick="changeFlag(this)">
            </td>
            <td>
                <input type="checkbox" name="read_access[{{$permission_menu->id}}]" value="0" onclick="changeFlag(this)">
            </td>
            <td>
                <input type="checkbox" name="update_access[{{$permission_menu->id}}]" value="0" onclick="changeFlag(this)">
            </td>
            <td>
                <input type="checkbox" name="delete_access[{{$permission_menu->id}}]" value="0" onclick="changeFlag(this)">
            </td>
            <td>
                <input type="checkbox" name="approve_access[{{$permission_menu->id}}]" value="0" onclick="changeFlag(this)">
            </td>
            <td>
                <input type="checkbox" name="export_pdf_access[{{$permission_menu->id}}]" value="0"
                       onclick="changeFlag(this)">
            </td>
            <td>
                <input type="checkbox" name="export_excel_access[{{$permission_menu->id}}]" value="0"
                       onclick="changeFlag(this)">
            </td>
        </tr>
        @endforeach
        </tbody>
    </thead>
</table>

Таким образом, вы можете правильно сопоставить результаты:


public function store(Request $request)
{
        $this->validate($request, [
            'user_access' => 'required',
        ], [
            'user_access.required' => 'User harus dipilih!',
        ]);

        foreach($request->menus_id as $menu_id)
        {
            $create_access = $request->create_access;
            $read_access = $request->read_access;
            $update_access = $request->update_access;
            $delete_access = $request->delete_access;
            $approve_access = $request->approve_access;
            $export_pdf_access = $request->export_pdf_access;
            $export_excel_access = $request->export_excel_access;


            if (!isset($create_access[$menu_id])) {
                $create_access[$menu_id] = 0;
            }

            if(!isset($read_access[$menu_id])){
                $read_access[$menu_id] = 0;
            }

            if(!isset($update_access[$menu_id])){
                $update_access[$menu_id] = 0;
            }

            if(!isset($delete_access[$menu_id])){
                $delete_access[$menu_id] = 0;
            }

            if(!isset($approve_access[$index])){
                $approve_access[$index] = 0;
            }

            if(!isset($export_pdf_access[$menu_id])){
                $export_pdf_access[$menu_id] = 0;
            }

            if(!isset($export_excel_access[$menu_id])){
                $export_excel_access[$menu_id] = 0;
            }



            $permission = [
                'menu_id' => $menu_id,

                'create_access' => $create_access[$menu_id],       
               'read_access' => $read_access[$menu_id],
                'update_access' => $update_access[$menu_id],
                'delete_access' => $delete_access[$menu_id],
                'approve_access' => $approve_access[$menu_id],
                'export_pdf_access' => $export_pdf_access[$menu_id],
                'export_excel_access' => $export_excel_access[$menu_id],
                'user_id' => $request->user_id,
                'user_access' => $request->user_access
            ];


            DB::table('permissions')->insert($permission);
        }

        return redirect()->back()->with('success', 'Hak akses berhasil di set!');
    }

Примечание: вместо if(!isset($x[$menu_id])) { $x[$menu_id] = 0; } вы можете просто сделать $x[$menu_id]??0 в массиве $permission

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...