Проверка флажка Laravel всегда пуста?

У меня есть такие галочки:

<div class="form-group">
  <div style="display:none ;" class="weekday_message form-control alert-warning"></div>
  <label id="weekday2" for="weekday" class="col-md-4 control-label">Weekday</label>
  <div class="required form-field" name="weekday" id="weekday">
    <input class="weekday" type="checkbox" name="weekdays[]" value="MO">Monday
    <input class="weekday" type="checkbox" name="weekdays[]" value="TU">Tuesday
    <input class="weekday" type="checkbox" name="weekdays[]" value="WE">Wednesday
    <input class="weekday" type="checkbox" name="weekdays[]" value="TH">Thursday
    <input class="weekday" type="checkbox" name="weekdays[]" value="FR">Friday
    <input class="weekday" type="checkbox" name="weekdays[]" value="SA">Saturday
    <input class="weekday" type="checkbox" name="weekdays[]" value="SU">Sunday
  </div>
    <span class="help-block">
        <strong></strong>
</span>
  </div>

Моя проверка:

public function rules()
    {
        return [
            'startdate' => 'required|date',
            'endate' => 'nullable|date',
            'startime' => ['required', new Time],
            'endtime' => ['required', new Time],
            'title' => 'required',
            'entity_id' => 'required',
            'type' => 'required|exists:entities,type',
            'description' => 'required',
            'frequency' => 'required',
            'interval' => 'nullable|numeric',
            'monthday' => 'nullable|numeric|min:1|max:3',
            'weekdays' => 'array|max:3',
            'month' => 'nullable|numeric',
            'until' => 'nullable|date',
            'tags' => 'nullable',
        ];
    }

и контроллер:

public function storeEvent(EventRequest $request)
{
    $test = ($request->input('weekdays'));
    dd($test);
    $weekday_string = implode(",", $request->input('weekdays'));
    $request->merge(array('weekday', $weekday_string));
    dd($request->all());
    $event = DirtyEvent::create($request->all());
    $geoloc_id = Entity::find($event->entity_id)
        ->first();
    $user_id = Auth::id();
    // Save Geoloc + user id into newly created event
    $event->_geoloc()->associate($geoloc_id);
    $event->users()->associate($user_id);
    $event->save();

Теперь проверка, кажется, проходит, потому что она делает дамп данных, однако как dd($test), так и $request->all() возвращают мне пустые дни недели, как будто они не были определены. Что может быть возможной причиной этого?


person Przemyslaw Wojtas    schedule 26.09.2017    source источник
comment
У вас есть какие-либо флажки в вашей форме? Насколько я знаю, снятый флажок не передается в Request input.   -  person lesssugar    schedule 26.09.2017
comment
у меня есть, я проверил их все в процессе заполнения формы   -  person Przemyslaw Wojtas    schedule 26.09.2017
comment
В вашем HTML указано weekday (единственное число), но в вашем наборе правил указано weekdays (множественное число). Я добавил это к своему ответу.   -  person Camilo    schedule 26.09.2017


Ответы (2)


Если вы хотите убедиться, что у вас всегда выбран хотя бы один день недели, вы должны изменить:

'weekdays' => 'array|max:3',

в:

'weekdays' => 'array|required|max:3',

Также я предполагаю, что вы не отправляете данные, используя стандартную HTML-форму, потому что вы задали, например, имя для div, поэтому, возможно, вы забыли прикрепить дни недели или где-то есть ошибка в коде?

person Marcin Nabiałek    schedule 26.09.2017
comment
Я отправляю их с помощью ajax, дело в том, что я пытался сделать это как «требуемый», и самое смешное, что он не возвращал никаких ошибок. - person Przemyslaw Wojtas; 26.09.2017
comment
Так что посмотрите в консоль вашего браузера и проверьте, что именно отправлено. Откуда вы знаете, что он не возвращает никаких ошибок проверки? Вы уже проверили это в консоли? - person Marcin Nabiałek; 26.09.2017
comment
Однако я делаю form.serialize в ajax, данные: это может быть причиной? - person Przemyslaw Wojtas; 26.09.2017
comment
Сложно сказать. Посмотрите на свою консоль и проверьте, какие именно данные вы отправляете в свой сервер. - person Marcin Nabiałek; 26.09.2017
comment
и да, я проверил, и если я удалю dd($test), я получу dd из $request-›все, но только без рабочих дней[] - person Przemyslaw Wojtas; 26.09.2017
comment
Если у вас нет обязательного правила, это нормально - когда вы его не отправляете, проверка пройдет, когда вы вообще не отправляете дни недели - person Marcin Nabiałek; 26.09.2017
comment
Что такое EventRequest, который вы использовали в качестве подсказки типа? Это заказная модель? Я проверил ваш код, и все работает с запросом вместо EventRequest. - person Rouhollah Mazarei; 27.09.2017

Ваш HTML говорит weekday (единственное число), но ваш набор правил говорит weekdays (множественное число).

Чтобы ввод weekdays был включен в запрос, должен быть установлен хотя бы один флажок. Вы можете использовать значение по умолчанию, если ничего не было выбрано, добавив скрытый ввод перед флажками.

<input type="hidden" name="weekdays" value="defaultValue">
person Camilo    schedule 26.09.2017