Как отправить непроверенные флажки на контроллер - PullRequest
2 голосов
/ 24 апреля 2019

Хорошо, во-первых, у меня есть таблица «settings» в моей базе данных, в которой у меня есть поля «name» и «value», это таблица конфигурации, где значением может быть что угодно - от строковых до логических значений и т. Д.

Теперь на моем блейде у меня есть форма с различными входными данными: "тексты", "выбирает", "флажки" и т. Д. При отправке формы на контроллере я запускаю foreach, где для каждого атрибута $request, который я храню его ключ в качестве имени и его значение в качестве значения в базе данных.

$agency_id = Auth::user()->agency->id;
$settings = AgencySettings::whereAgencyId($agency_id)->get();
foreach ($request->except('_token') as $key => $value)
{
    $setting = $settings->where('name','=',$key)->first();
    if (boolval($setting))
    {
        $setting->value = $value;
        $setting->update();
    }else{
        $setting = new AgencySettings;
        $setting->agency_id = $agency_id;
        $setting->name = $key;
        $setting->value = $value;
        $setting->save();
    }
}

Все работает хорошо, кроме не отмеченных флажков, которые не находятся внутри $request. Я знаю, что могу обрабатывать их примерно так $request->has('name_of_checkbox'), но из-за динамической природы таблицы в базе данных я не хочу жестко прописывать в моем контроллере имя определенного параметра.

Моя цель заключается в том, чтобы код на моем контроллере был одинаковым независимо от количества различных настроек, которые я буду использовать на своем веб-интерфейсе (возможно, в будущем потребуется добавить больше).

Итак, мой вопрос, есть ли способ обработки этих флажков на стороне сервера без необходимости обращаться к ним конкретно, или способ всегда возвращать значение флажков на сервер, несмотря на его состояние?

Моя первая мысль - использовать javascript и скрытые входные данные, но, возможно, есть лучший способ.

Ответы [ 2 ]

4 голосов
/ 24 апреля 2019

Вы можете добавить скрытое поле с тем же именем перед каждым флажком, который хотите получить, например:

<input type="hidden"   name="checkbox-1" value="0" /> 
<input type="checkbox" name="checkbox-1" value="1" /> My checbox 1 

, который отправит скрытое поле со значением 0, когда поле не отмечено, и отправитправильное истинное значение при его проверке.

ПРИМЕЧАНИЕ: Просто убедитесь, что вы сначала добавляете скрытое поле, чтобы при проверке поля вы получили только проверенное поле.

0 голосов
/ 24 апреля 2019

Другое решение - просто проверить, установлено ли значение для «checkbox-1» в массиве post. Таким образом, вы установите значение по умолчанию 0 на стороне вашего контроллера и проверьте, существует ли значение, вместо того, чтобы проверять, является ли оно 0 или 1.

(М.)

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