Laravel表单阵列验证

时间:2017-10-03 09:26:55

标签: php forms laravel validation

我需要一些帮助才能使用Laravel 5.4验证我的表单。

我的表格:

{{Form::bsText('general[firstname]')}} 
{{Form::bsText('general[lastname]')}}

然后我有一个RequestObject用于验证,具有以下规则:

'general[firstname]' => 'required|string:max:255',
'general[lastname]' => 'required|string:max:255',

这样,当不按预期方式为空时,它会生成“必需”错误。 虽然当我填写一个字符串时,它仍然会提供所需的错误消息。

我也从laravel docs中尝试了以下内容:

'general.firstname' => 'required|string:max:255',
'general.lastname' => 'required|string:max:255',

'general.*.firstname' => 'required|string:max:255',
'general.*.lastname' => 'required|string:max:255',

以上两点都不会出错。

根据要求,这是我的完整Request对象:

/**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
public function authorize()
{
    $user = Auth::user();

    return ($user && $user->isProjectManager()) ||
            ($user && $user->isAdmin());
}

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    switch($this->method()){
        case 'GET':
        case 'DELETE':
            return [];
        case 'POST':
            return [
                'name' => 'required|string|max:255',
                'email' => 'required|string|email|max:255|unique:users',
                'role' => 'in:2,3,4,5,6,7',
                'password' => 'required|string|min:6|confirmed',
                'project_manager_gegevens_photo' => 'required_if:role,2|mimes:png,jpeg,gif',
                'general[voornaam]' => 'required|alpha:max:255',
                'general[achternaam]' => 'required|string:max:255',
                'general[date]' => 'required_if:role,3,4,5|date|after:today',
                'general[telefoonnummer]' => 'required_if:role,3,4,5',
                'general[interne_medewerker]' => 'boolean',
                'general[geslacht]' => 'in:m,v,o',
            ];
        case 'PUT':
        case 'PATCH':
            return [
                'name' => 'required|string|max:255',
                'password' => 'required|string|min:6|confirmed',
            ];
        default:return [];
    }
}

证明它与数组验证有关: 当我将名称更改为:

{{Form::bsText('general_firstname')}} 

'general_firstname' => 'required|string:max:255'

它会像你期望的那样验证它。虽然,我喜欢清洁和分离的东西,并希望有一个包含所有一般领域的阵列。

那么,我如何验证它以便它是一个数组呢?

5 个答案:

答案 0 :(得分:1)

使用alpha而不是字符串,

'general.firstname' => 'required|alpha|max:255'

替换它,

'general[firstname]' => 'required|string:max:255',

参考文档, https://laravel.com/docs/5.4/validation#rule-alpha

答案 1 :(得分:0)

试试这个

'general.firstname' => 'required|alpha|max:255',
'general.lastname' => 'required|alpha|max:255',

答案 2 :(得分:0)

你是这样用的吗?

 'general[voornaam]' => 'required|alpha:max:255',
  'general[achternaam]' => 'required|string:max:255',

如果是这样,请用以下代替: -

'general[voornaam]' => 'required|alpha|max:255',
'general[achternaam]' => 'required|alpha|max:255',

答案 3 :(得分:0)

好吧,我还没有检查5.4中做了哪些更改但是根据5.1我在我的项目中进行了以下表格验证:

    $data = Input::all();

    $rules = [
            'fname' => ['required', 'min:3'],
            'lname' => ['required', 'min:3'],   
            'email' => ['required', 'email', 'unique:users', 'min:3'],
            'password' => ['required', 'min:4'],
            'type' => ['required']
            ];
    $validator = $this->validate($request, $rules);

你可以看到fname和lname我没有提到任何数据类型,即默认是字符串,所以你可以尝试这种方式。

可能会对你有帮助。

答案 4 :(得分:0)

所以,我忘记的是使用自定义表单组件。 在这些组件中,我查找了该字段的名称。所以我会检查

$errors->get('general[voornaam]')

我应该在哪里得到它们:

$errors->get('general.voornaam')

呀!今天足够了!