如何在Laravel 5中使用JsValidator验证所选的多选

时间:2016-05-09 11:31:11

标签: php laravel laravel-5 jquery-chosen

我正在使用chosen来转换多选中的简单选择,就像这里......

<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>

尝试使用JsValidator包...

验证是否已选择某些media_format元素
{!! JsValidator::formRequest('Maravel\Media\Http\Requests\Admin\MediaResourceCreateRequest', '#create-edit-form' ) !!}

最后,在Request class中使用以下规则...

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

Laravel验证错误包返回媒体格式错误,但不会在任何地方打印。为什么?它与选择隐藏选择元素的事实有关吗?我试过......

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

没有成功。或者它与字段名称是 media_formats [] 而不是 media_formats 的事实有关吗?

1 个答案:

答案 0 :(得分:1)

最后答案是我怀疑的两个问题。做...

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

......如果我这样做......

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

错误消息被打印,因为jquery validate查找名为&#39; media_formats []&#39;的输入。 - 括号 - 。但是,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']); ?>

我可以更改规则数组并连接&#39; []&#39;到被验证为数组的字段,以便jquery validate可以找到应该出现错误的元素。

可以在JsValidator配置文件中更改JsValidator使用的视图。

return array(

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