我正在使用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包用于输入验证我也都是耳朵。
答案 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