Наиболее распространенные подходы - это использование формы, которая, помимо прочего, обеспечивает валидацию, или просто валидатор в качестве отдельного компонента. В вашем случае вы - так как используете ApiPlatform - последний будет лучшим выбором, так как вам не нужно возвращать форму пользователю, а вместо этого возвращать ответ об ошибке.
Сначала вам нужно добавить Validator в ваш контроллер:
use ApiPlatform\Core\Bridge\Symfony\Validator\Exception\ValidationException;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class CreateUser
{
private $validator;
public function __construct(ValidatorInterface $validator)
{
$this->validator = $validator;
}
public function __invoke(UserRegistration $data): UserRegistration
{
$errors = $this->validator->validate($data);
if (count($errors) > 0) {
throw new ValidationException($errors);
}
return $data;
}
}
Вы также можете проверить, как ApiPlatform делает это, посмотрев ValidateListener . Он предоставляет некоторые дополнительные функции, например, для групп проверки, которые вам пока не нужны, но могут быть интересны позже. Затем ApiPlatform будет использовать свой ValidationExceptionListener , чтобы реагировать на создаваемое вами исключение и отображать его соответствующим образом.
var q = from x in doc.Root.Elements()
where x.Name.LocalName=="RegistryErrorList"
select x;
var errorList = q.SingleOrDefault();
В синтаксисе "метода" запрос был бы похож:
XElement errorList = doc.Root.Elements().Where(o => o.Name.LocalName == "RegistryErrorList").SingleOrDefault();