Существует ли способ получить элементы с помощью только локальные имена в запросе Linq-to-XML?

Наиболее распространенные подходы - это использование формы, которая, помимо прочего, обеспечивает валидацию, или просто валидатор в качестве отдельного компонента. В вашем случае вы - так как используете 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 , чтобы реагировать на создаваемое вами исключение и отображать его соответствующим образом.

9
задан aogan 6 October 2008 в 19:48
поделиться

2 ответа

var q = from x in doc.Root.Elements()
        where x.Name.LocalName=="RegistryErrorList"
        select x;

var errorList = q.SingleOrDefault();
8
ответ дан 4 December 2019 в 21:13
поделиться

В синтаксисе "метода" запрос был бы похож:

XElement errorList = doc.Root.Elements().Where(o => o.Name.LocalName == "RegistryErrorList").SingleOrDefault();
2
ответ дан 4 December 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: