laravel - 如何在输入数组上使用自定义验证属性

标签 laravel laravel-5 laravel-validation laravel-request

我正在使用 Laravel 构建一个包含输入数组的表单,当发生验证错误时,我很难显示翻译后的属性名称。为了简单起见,我将发布一个有关我的问题的简单示例。

在 View 中形成:

<form method="POST" action="{{ route('photo.store') }}" accept-charset="UTF-8" role="form">
<input name="_token" type="hidden" value="{{ csrf_token() }}">
<div class="row">
    <div class="col-lg-12">
        <div class="form-group{{ $errors->has('testfield') ? ' has-error' : '' }}">
            <label class="control-label"
                   for="testfield">{{ trans('validation.attributes.testfield') }}</label>
            <input class="form-control" name="testfield" type="text" id="testfield"
                   value="{{ old('testfield') }}">
            @if ($errors->has('testfield'))
                <p class="help-block">{{ $errors->first('testfield') }}</p>
            @endif
        </div>
    </div>
    <div class="col-lg-12">
        <div class="form-group{{ $errors->has('testfieldarray.0') ? ' has-error' : '' }}">
            <label class="control-label"
                   for="testfieldarray-0">{{ trans('validation.attributes.testfieldarray') }}</label>
            <input class="form-control" name="testfieldarray[]" type="text" id="testfieldarray-0"
                   value="{{ old('testfieldarray.0') }}">
            @if ($errors->has('testfieldarray.0'))
                <p class="help-block">{{ $errors->first('testfieldarray.0') }}</p>
            @endif
        </div>
    </div>
    <div class="col-lg-12">
        <div class="form-group{{ $errors->has('testfieldarray.1') ? ' has-error' : '' }}">
            <label class="control-label"
                   for="testfieldarray-1">{{ trans('validation.attributes.testfieldarray') }}</label>
            <input class="form-control" name="testfieldarray[]" type="text" id="testfieldarray-1"
                   value="{{ old('testfieldarray.1') }}">
            @if ($errors->has('testfieldarray.1'))
                <p class="help-block">{{ $errors->first('testfieldarray.1') }}</p>
            @endif
        </div>
    </div>
</div>
<div class="row">
    <div class="col-lg-12">
        <input class="btn btn-primary" type="submit" value="Gravar">
    </div>
</div>

表单请求中的规则函数:

public function rules() {
    $rules = [
        'testfield' => array('required'),
    ];

    foreach ($this->request->get('testfieldarray') as $key => $val) {
        $rules['testfieldarray.' . $key] = array('required');
    }

    return $rules;
}

lang/en/validation.php

'attributes' => [
    'testfield' => 'Test Field',
    'testfieldarray' => 'Test Field Array',
],

验证正确执行,错误消息也正确执行。错误消息中的唯一问题是显示的属性名称。在两个数组输入中,消息中插入的属性名称是“testfieldarray.0”和“testfieldarray.1”,而不是“测试字段数组”。我已经尝试添加语言文件 'testfieldarray.0' => '测试字段数组'、'testfieldarray.1' => '测试字段数组',但消息保持不变。有没有办法正确传递属性名称?

最佳答案

只需查看为数组的整数类型值检查添加自定义规则的示例

打开文件

/resources/lang/en/validation.php

然后添加自定义消息。

// add it before "accepted" message.
'numericarray'         => 'The :attribute must be numeric array value.',

再次打开另一个文件以添加自定义验证规则。

/app/Providers/AppServiceProvider.php

因此,在启动函数中添加自定义验证代码。

public function boot()
{
    $this->app['validator']->extend('numericarray', function ($attribute, $value, $parameters)
    {
        foreach ($value as $v) {
            if (!is_int($v)) {
                return false;
            }
        }
        return true;
    });
}

现在您可以使用numericarray来检查数组的整数类型值。

$this->validate($request, [
            'input_filed_1' => 'required',
            'input_filed_2' => 'numericarray'
        ]);

----------- 祝你好运 --------------

关于laravel - 如何在输入数组上使用自定义验证属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30372438/

相关文章:

php - 使用外键laravel从另一个表中获取数据

php - 拉维尔 5.2 : POST request is always returning "405 Method Not Allowed"

php - 在 laravel 中显示数据库凭据

Laravel JSON 响应更改关联数组键的值

php - Laravel 验证双重嵌套

laravel - 我如何在 Laravel 5.5 的 FormRequest 类中返回自定义响应?

css - Laravel & Vue 警告问题

Laravel Carbon,用工作日检索今天的日期?

amazon-web-services - AWS Elastic Beanstalk - 在环境属性中设置 .env Laravel

php - 如何在 laravel 验证中验证多个电子邮件?