Łącz ograniczenia i transformatory danych

Chciałbym zrobić coś, co wygląda jak to, co zostało zrobioneJak korzystać z transformatorów danych seminarium. Ale chciałbym dodać proces i nie mogę znaleźć żadnego przykładu.

W samouczku symfony transformacja danych polega na zmianie numeru wydania naIssue obiekt. Odbywa się to wreverseTransform() funkcja zIssueToNumberTransformer

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;
}

Widzimy, że jeśli podany zostanie nieprawidłowy numer wydania, transformacja zakończy się niepowodzeniem i funkcja rzuci aTransformationFailedException. W rezultacie formularz jako błąd z komunikatem „Ta wartość jest nieprawidłowa”. Dobrze byłoby spersonalizować tę wiadomość.

Proces transformacji danych jest wykonywany przed walidacją (z ograniczeniami zastosowanymi do pola), więc nie mogę znaleźć sposobu na sprawdzenie poprawności numeru wydania przed próbą jego przekształcenia.

Jako kolejny przykład, dlaczego muszę walidować przed transformacją, używam Menedżera dokumentów MongoDB, aby przekonwertować „Identyfikator mongo wydania” na problem (formularz jest używany przez serwer API REST, dlatego otrzymuję identyfikator). Więc :

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;
}

Jeśli identyfikator otrzymany w formularzu API nie zostanie sformatowany jako poprawny MongoID, klient otrzyma 500. Chcę więc sprawdzić, przed transformacją, czy otrzymany identyfikator jest poprawny, ponieważ jeśli nie, transformacja spowoduje błąd krytyczny. A jeśli zarządzam wszystkimi przypadkami w mojej transformacji, np. Sprawdzam, czy $ id jest poprawny, to tak jak robię sprawdzanie poprawności w transformatorze i nie jest to poprawne.

Moje pytanie brzmi: czy istnieje sposób na zastosowanie ograniczeń przed transformacją danych? czy istnieje sposób na dodanie ograniczenia skrótu Naruszenie w formularzu, gdy transformacja nie powiodła się?

questionAnswers(1)

yourAnswerToTheQuestion