- muszę ograniczenie zwyczaj sprawdzania poprawności, aby uruchomić na niezmapowanego pole formularza
- muszę identyfikator obiektu forma manipuluje, aby wyeliminować je z uwzględnieniem robi mój ograniczenie sprawdzania
- Mocowanie walidacji do samej lub polu unmapped postaci nie daje mi tyle kontekst uruchomić moje zapytanie walidacja
Mam niezmapowane pole w moim formularzu encji Person
, w którym muszę uruchomić sprawdzanie poprawności. Śledziłem this great article, jak to zrobić, ale mój przypadek użycia jest nieco inny i nie jest całkowicie objęty tym artykułem.
Tworzę własne unikalne ograniczenie, które musi uruchomić niestandardową kwerendę, aby określić unikalność. Aby uruchomić kwerendę, potrzebuję dostępu do wartości pola, która została przesłana, , a także oryginalnego obiektu Person
(aby uzyskać identyfikator, jeśli jest to operacja aktualizacji). Bez tego obiektu nie będę mógł go wyeliminować podczas zapytania o unikalność.
Gdybym zastosować walidatora od klasy PersonType
tak:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver
->setDefaults(array(
'data_class' => 'CS\AcmeBundle\Entity\Person',
'constraints' => array(
new MyUniqueValidator(),
)
))
;
}
Następnie walidator pobiera przeszła całą Person
obiektu do przeprowadzenia walidacji na. To mi nie pomoże, ponieważ przesłane dane formularza nie są przechowywane w obiekcie Person
(jest to pole, które nie jest mapowane, które obsłużę po wywołaniu $form->isValid()
w kontrolerze).
Gdybym zastosować walidator pola niezmapowanego bezpośrednio Zamiast:
$builder
->add('myUnmappedField', 'text', array(
'mapped' => false,
'constraints' => array(
new MyUniqueValidator(),
)
),
))
Następnie obiekt I przejdzie do walidatora jest tylko samodzielna forma tekstu, i nic więcej. Nie mam obiektu ID Person
(jeśli była to operacja aktualizacji) do wykonania przez zapytanie o unikalność.
Mam nadzieję, że wyjaśniłem to poprawnie. Czy mogę z wdzięcznością wykonywać takie opcje sprawdzania poprawności?
Dzięki. Poszedłem z dodaniem innej właściwości w mojej encji Person i odwzorowaniu na nią pola formularza. To działa dobrze. – Brian
Cieszę się, że mogę pomóc;) A także w przyszłości, zawsze pamiętaj, formularz może mieć tylko jeden ukryty obiekt.Jeśli potrzebujesz więcej niż jednego obiektu lub czegoś w tym rodzaju, stwórz kolejny obiekt złożony i zawsze może on zawierać więcej obiektów/właściwości :) – tomazahlin
oczywiście działa, ale nie może to być zaakceptowana odpowiedź na zadane pytanie. problem nie został przez to naprawiony, jest po prostu pominięty – AlexK