2

我正在使用 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 包,我会全力以赴。

4

3 回答 3

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

于 2018-05-04T14:52:47.630 回答
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

于 2016-10-19T14:51:38.293 回答
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);

    }

}

我没有测试它,但我认为它会工作。

于 2016-03-05T18:54:07.513 回答