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

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

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

Другой пример того, почему мне нужно проверить перед преобразованием, я использую MongoDB Document Manager для преобразования "Issue Mongo ID " к проблеме (форма используется сервером REST API, который 'почему я получаю идентификатор). Так :

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)

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