如何使Laravel的验证器$规则可选? [英] How to make Laravel's Validator $rules optional?

查看:146
本文介绍了如何使Laravel的验证器$规则可选?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有用户模型有两种方法:



User.php

 类用户扩展Eloquent 
{
/ *验证规则* /
私有静态$ rules = array(
'user'=>'unique:users | required | alpha_num',
'email'=>'required | email'
);

/ *验证注册表单* /
public static function register($ data)
{
$ validator = Validator :: make($ data,static: :$规则);
if($ validator-> failed())
{
/ * ...做某事* /
}
else
{
/ * ..做其他事情* /
}
}

/ *验证更新表单* /
public static function update($ data)
{
$ validator = Validator :: make($ data,static :: $ rules);
if($ validator-> failed())
{
/ * ...做某事* /
}
else
{
/ * ..做别的事* /
}
}
}

我的问题:如何使验证规则可选,因此即使 update()的数据只是 email 字段,它将忽略用户并仍然验证到 true 。 br>
这是甚么可能还是我缺少某些东西?



对不起,我的英文不好。

解决方案

不知道如果我的问题正确,但如果用户是可选的,您应该从验证器中删除required。这样你就可以:

 'user'=> 'unique:users | alpha_num',

而不是:

 'user'=> 'unique:users | required | alpha_num',

另一方面,我为我创建一个自定义方法可以根据传入参数返回自定义验证规则的模型。



例如:

 私有函数getValidationRules($ rules)
{
if($ rules == UPDATE_EMAIL)
{
返回数组('email'=>' |电子邮件');
} else {
return array(
'user'=>'unique:users | required | alpha_num',
'email'=>'required | email'
);
}
}

我想这只是一个个人选择,但我有发现从一个方法获取验证规则可以更好地控制我真正想要验证的内容,特别是当您要执行一些高级验证时。



希望它可以帮助您。


Let's say I have User model with two methods:

User.php

class User extends Eloquent
{  
    /* Validation rules */
    private static $rules = array(
        'user'  => 'unique:users|required|alpha_num',
        'email' => 'required|email'
    );

    /* Validate against registration form */
    public static function register($data)
    {
        $validator = Validator::make($data, static::$rules);
        if($validator->fails())
        {
            /*... do someting */
        }
        else
        {
            /* .. do something else */
        }
    }

    /* Validate against update form */
    public static function update($data)
    {
        $validator = Validator::make($data, static::$rules);
        if($validator->fails())
        {
            /*... do someting */
        }
        else
        {
            /* .. do something else */
        }
    }
}

My question: How can I make validation rules optional, so even if data for update() would be just email field, it would ignore user and still validate to true.
Is this even possible or am I missing something?

Sorry for my bad English.

解决方案

Not sure if I'm getting your question right but if the user is optional you should remove 'required' from the validator. This way you will have:

'user'  => 'unique:users|alpha_num',

instead of:

'user'  => 'unique:users|required|alpha_num',

On the other hand I create a custom method for my models that is able to return custom validation rules depending on incoming parameters.

For example:

private function getValidationRules($rules)
{
    if ($rules == UPDATE_EMAIL)
    {
        return array('email' => 'required|email');
    } else {
        return array(
            'user'  => 'unique:users|required|alpha_num',
            'email' => 'required|email'
        );
    }
}

I guess it's only a personal choice, but I have found that getting the validation rules from a method allows more control over what I really want to validate, especially when you want to perform some advanced validations.

Hope it helps you.

这篇关于如何使Laravel的验证器$规则可选?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆