Получить значение нескольких флажков вместе с их родительским полем ввода - PullRequest
0 голосов
/ 25 января 2020

Я хочу некоторые предложения или обходной путь для ситуации, которая у меня есть. Я создаю Систему управления доступом , где я должен определить разрешения Создание, чтение, обновление и Удаление для каждого модуля. Определив разрешения для каждого модуля, администратор создаст роль , которая будет назначена пользователю позже. У меня есть около 14 модулей, и каждый модуль имеет четыре разрешения, как я упоминал ранее. Я получаю ввод каждого разрешения с помощью флажка, поэтому у меня есть несколько флажков с родительским полем, имеющим id каждого модуля. Вот некоторый код, чтобы лучше понять, чего я хочу достичь и каков мой подход к нему.

HTML:

<!-- Iteration loop starts here for rendering each module along with it's checkboxes -->
<tr>
    <th scope="row">{{$mod->m_name}}</th>
    <input type="hidden" name="module_id" value="{{$mod->m_id}}">
    <td><input type="checkbox" name="p_read" value="1"></td>
    <td><input type="checkbox" name="p_create" value="1"></td>
    <td><input type="checkbox" name="p_update" value="1"></td>
    <td><input type="checkbox" name="p_delete" value="1"></td>
</tr>
<!-- Loop ends here -->

Просмотр: rendered view of the above html

JavaScript:

var foo = $('#formAddRole').serializeArray();
var json = {"module" : []};

$.each(foo, (key, obj)=>{
    var arr = {
        "module_id" : 0,
        "permissions" : {
            "create" : 0,
            "read" : 0,
            "update" : 0,
            "delete" : 0,
        }
    };

    if(obj.name == "p_read"){
        arr.permissions.read = 1;
        json.module.push(arr);
    }
    // conditions for 'p_create', 'p_update', 'p_delete' goes here...

    if(obj.name == "module_id"){
        arr.module_id = obj.value;
        json.module.push(arr);
    }
});

Структура JSON, которую я хочу отправить на сервер :

{"modules" : [
    {
        "module_id" : 1,
        "permissions" : {
            "create" : 1, 
            "read" : 1,
            "update" : 1,
            "delete" : 0,
        }
    },
    {
        "module_id" : 2,
        "permissions" : {
            "create" : 0, 
            "read" : 1,
            "update" : 1,
            "delete" : 0,
        }
    },
    // so on...
 ]}

Я застрял в этой точке. Логика c, которую я использую, не совсем полезна для меня. Что может быть лучшим подходом, Как я могу достичь этого наилучшим образом? Любая помощь или предложения будут оценены. Спасибо!

1 Ответ

0 голосов
/ 25 января 2020

Если вы используете PHP, просто переименуйте свои поля, как показано в коде ниже. Нет JavaScript необходимо ...

<tr>
    <th scope="row">{{$mod->m_name}}</th>
    <input type="hidden" name="modules[0][module_id]" value="{{$mod->m_id}}">
    <td><input type="checkbox" name="modules[0][permissions][p_read]" value="1"></td>
    <td><input type="checkbox" name="modules[0][permissions][p_create]" value="1"></td>
    <td><input type="checkbox" name="modules[0][permissions][p_update]" value="1"></td>
    <td><input type="checkbox" name="modules[0][permissions][p_delete]" value="1"></td>
</tr>
<tr>
    <th scope="row">{{$mod->m_name}}</th>
    <input type="hidden" name="modules[1][module_id]" value="{{$mod->m_id}}">
    <td><input type="checkbox" name="modules[1][permissions][p_read]" value="1"></td>
    <td><input type="checkbox" name="modules[1][permissions][p_create]" value="1"></td>
    <td><input type="checkbox" name="modules[1][permissions][p_update]" value="1"></td>
    <td><input type="checkbox" name="modules[1][permissions][p_delete]" value="1"></td>
</tr>

Это приведет к массиву $ _GET в PHP:

"modules" : [
    [
        "module_id" : 1,
        "permissions" : [
            "create" : 1, 
            "read" : 1,
            "update" : 1,
            "delete" : 0,
        ]
    ],
    [
        "module_id" : 2,
        "permissions" : [
            "create" : 0, 
            "read" : 1,
            "update" : 1,
            "delete" : 0,
        ]
    ]
 ]
...