Я использую проверку уважения 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 для проверки ввода, я все уши.
Я не использовал этот пакет проверки. Возможно, это не самый лучший ответ, но это то, что я получаю из документации пакета.
Я думаю, что метод один из() поможет вам, так как он действует как оператор ИЛИ. Другой метод, который поможет, это 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);
}
}
Я не проверял это, но думаю, что это сработает.
Это старый вопрос, но дополнительный метод () будет работать.
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
Я знаю, что это старый, но я сталкиваюсь с этим вопросом, и есть более простой способ сделать то, что вы хотите:
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