Как выбранный мультиселект может быть проверен с помощью JsValidator в Laravel 5

я использую выбранный преобразовать простой выбор в множественный выбор, как здесь …

<div class="form-group">
{!! Form::label('media_formats', trans('medias::messages.valid_formats'), ['class' => 'control-label']) !!}
{!! Form::select('media_formats[]', $media_formats, null, ['class' => 'form-control', 'id' => 'media_formats', 'multiple', 'data-chosen']) !!}
</div>

Попытка проверить, что какой-то элемент media_format был выбран с помощью JsValidator пакет …

{!! JsValidator::formRequest('Maravel\Media\Http\Requests\Admin\MediaResourceCreateRequest', '#create-edit-form' ) !!}

И наконец, используя следующее правило в классе Request …

public function rules()
{
return [
...
'media_formats' => 'required',
];
}

Пакет ошибок проверки Laravel возвращает ошибку формата мультимедиа, но она нигде не печатается. Зачем? Это связано с тем, что selected скрывает элемент select? Я старался…

    {!! JsValidator::formRequest('Maravel\Media\Http\Requests\Admin\MediaResourceCreateRequest', '#create-edit-form' )->ignore('') !!}

без успеха. Или это связано с тем, что имя поля media_formats [] и не media_formats?

3

Решение

Наконец, ответ был в двух проблемах, от которых я подозревал. Ведение …

{!! JsValidator::formRequest('Maravel\Media\Http\Requests\Admin\MediaResourceCreateRequest', '#create-edit-form' )->ignore('') !!}

…и если я сделаю …

public function rules()
{
return [
...
'media_formats[]' => 'required',
];
}

Сообщение об ошибке выводится на печать, потому что jquery validate ищет вход с именем ‘media_formats []’ — с квадратными скобками -. Однако проверка Laravel не работает таким образом и ожидает имя поля без скобок.

Итак, я нашел обходной путь, чтобы все заработало. Если в запросе я делаю

public function rules()
{
return [
...
'media_formats' => 'required|array',
];
}

И я меняю представление, которое используется в JsValidator, и добавляю эти строки непосредственно перед тем, как задан параметр rules …

<?php
foreach($validator['rules'] as $i=>$rule){
foreach($rule as $j=>$rule_type){
foreach($rule_type as $k=>$rule_option){
if($rule_option[0] == "Array") {
$validator['rules'][$i."[]"] = $validator['rules'][$i];
unset($validator['rules'][$i]);
}
}
}
};
?>

rules: <?php echo json_encode($validator['rules']); ?>

Я могу изменить массив правил и объединить ‘[]’ с полями, которые проверяются как массивы, поэтому jquery validate может найти элемент, в котором должна появиться ошибка.

Представление, используемое JsValidator, может быть изменено в конфигурационном файле JsValidator.

return array(

/*
* Default view used to render Javascript validation code
*/
'view' => 'jsvalidation::custom_bootstrap',
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]