Объединить ограничения и преобразователи данных

Я хотел бы сделать что-то похожее на то, что делается вКак использовать Data Transformers руководство. Но я хотел бы добавить процесс, и я не могу найти ни одного примера.

В учебнике по Symfony преобразование данных касается изменения номера проблемы наIssue объект. Это сделано вreverseTransform() функцияIssueToNumberTransformer

public function reverseTransform($number)
{
    if (!$number) {
        return null;
    }

    $issue = $this->om
        ->getRepository('AcmeTaskBundle:Issue')
        ->findOneBy(array('number' => $number))
    ;

    if (null === $issue) {
        throw new TransformationFailedException(sprintf(
            'An issue with number "%s" does not exist!',
            $number
        ));
    }

    return $issue;
}

Мы можем видеть, что если указан неверный номер проблемы, преобразование завершится неудачно, и функция сгенерируетTransformationFailedException, В результате в форме появляется ошибка с сообщением «Это значение недопустимо». Было бы здорово персонализировать это сообщение.

Процесс преобразования данных выполняется перед любой проверкой (с ограничениями, примененными к полю), поэтому я не могу найти способ проверить номер проблемы, прежде чем пытаться преобразовать ее.

Еще один пример того, почему мне нужно проверить перед преобразованием, я использую MongoDB Document Manager для преобразования «Issue mongo id» в Issue (форма используется сервером REST API, поэтому я получаю id). Так :

public function reverseTransform($id)
{
    if (!$number) {
        return null;
    }

    $issue = $this->dm
        ->getRepository('AcmeTaskBundle:Issue')
        ->find(new \MongoId($id))
    ;

    if (null === $issue) {
        throw new TransformationFailedException(sprintf(
            'An issue with number "%s" does not exist!',
            $number
        ));
    }

    return $issue;
}

Здесь, если идентификатор, который я получаю в форме API, не отформатирован как правильный MongoID, клиент получит 500. Поэтому я хочу перед преобразованием проверить, верен ли полученный идентификатор, потому что, если это не так, преобразование вызовет фатальную ошибку. И если я управляю всеми делами в моем преобразовании, такими как проверка правильности $ id, это похоже на то, что я делаю проверку в преобразователе, и это не правильно.

Мой вопрос: есть ли способ применить ограничения перед преобразованием данных? или есть способ добавить дайджест constraintViolation на форму, когда преобразование не удалось?

Ответы на вопрос(1)

Ваш ответ на вопрос