php尊重验证只是验证,如果不是空的

时间:2016-03-05 18:25:07

标签: php validation respect-validation

我正在使用php尊重验证。 https://github.com/Respect/Validation

class UserValidator implements iValidator
{

    public function validate($object)
    {

        $userValidator = v::attribute('email', v::email())
            ->attribute('mobile', v::numeric()->length(10,12))
            ->attribute('firstName', v::stringType()->length(5,255))
            ->attribute('lastName', v::stringType()->length(5,255))
            ->attribute('userName', v::stringType()->length(5,255)->unique('users'))
            ->attribute('password', v::stringType()->length(8,16));

        $userValidator->assert($object);

    }

}

这是我的用户验证码。

用户名和密码只是必填字段。 我希望它们是必需的,并且只有在用户填写输入时才应用其他字段验证。 我该怎么办 ? 毕竟我已经实施了自己的规则(独特) 如果有必要,我已准备好制定新的规则或其他任何规则。 如果你知道更好的PHP包用于输入验证我也都是耳朵。

3 个答案:

答案 0 :(得分:4)

这是一个老问题,但optional()方法可行。

class UserValidator implements iValidator
{

    public function validate($object)
    {

        $userValidator = v::attribute('email', v::optional(v::email()))
            ->attribute('mobile', v::optional(v::numeric()->length(10,12)))
            ->attribute('firstName', v::optional(v::stringType()->length(5,255)))
            ->attribute('lastName', v::optional(v::stringType()->length(5,255)))
            ->attribute('userName', v::stringType()->length(5,255)->unique('users'))
            ->attribute('password', v::stringType()->length(8,16));

        $userValidator->assert($object);

    }

}

请参阅文档:https://github.com/Respect/Validation/blob/1.1/docs/Optional.md

答案 1 :(得分:1)

我没有使用过这个验证包。这可能不是最好的答案,但这是我从包装文件中得到的。

我认为方法oneOf()可以帮助您,因为它充当OR运算符。另一种有用的方法是nullType(),它验证输入是否为空。您可以使用nullType()对所包含的内容进行分组,以使该字段成为可选字段。

class UserValidator implements iValidator
{

    public function validate($object)
    {

        $userValidator = v::attribute('email', v::email())
            ->attribute('mobile', v::oneOf(
                v::numeric()->length(10,12),
                v::nullType
            ))
            ->attribute('firstName', v::oneOf(
                v::stringType()->length(5,255),
                v::nullType
            ))
            ->attribute('lastName', v::oneOf(
                v::stringType()->length(5,255),
                v::nullType
            ))
            ->attribute('userName', v::stringType()->length(5,255)->unique('users'))
            ->attribute('password', v::oneOf(
                v::stringType()->length(8,16),
                v::nullType
            ));

        $userValidator->assert($object);

    }

}

我没有测试过,但我认为它有效。

答案 2 :(得分:1)

我知道这是旧的,但我遇到了这个问题,并且有一种更简单的方法可以做你想做的事情:

class UserValidator implements iValidator
{
    public function validate($object)
    {
        $userValidator = v::attribute('email', v::email(), false)
            ->attribute('mobile', v::numeric()->length(10,12), false)
            ->attribute('firstName', v::stringType()->length(5,255), false)
            ->attribute('lastName', v::stringType()->length(5,255), false)
            ->attribute('userName', v::stringType()->length(5,255)->unique('users'))
            ->attribute('password', v::stringType()->length(8,16));

        $userValidator->assert($object);
    }

}

在attribute()方法中有一个可选的第三个参数,用于强制验证是否必须:

https://github.com/Respect/Validation/blob/master/docs/Attribute.md