Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2][3] Form validation - sprawdzenie czy entity istnieje
Forum PHP.pl > Forum > PHP > Frameworki
wujek2009
Hej,

Stworzyłem formularz, pod który podpiąłem entity - dla którego ustawiłem odpowiednie reguły walidacji (w validation.yml). Mam pole idProduct w regułach - w jaki sposób sprawdzić czy przekazany id_product w formularzu istnieje w tabeli produktów? Nie chce tego robić w kontrolerze tylko dodać odpowiednią regułę w validatiom.yml

Czyli tworzymy wpis w tabeli np. "favourite_user_product" i chce sprawdzić czy idProduct z tej tabeli istieniej w relacji z tabelą "product".
ohm
Emm, query_builder w formularzu? smile.gif
wujek2009
Dzięki, zastosowałem to u siebie i działa. Jeszcze potestuje. Tylko czy ja dobrze rozumiem zasadę działania. Pobieramy wszystkie produkty i teraz jeżeli ktoś przekaże id_product spoza tablicy to wyrzuca błąd. Trochę niewydajne jest pobieranie wszystkiego i sprawdzanie czy przekazany id_product znajduje się w tych wszystkich obiektach - da się to inaczej zapisać?

  1. $builder->add('id_product', EntityType::class, array(
  2. 'class' => 'John\ProductBundle\Entity\Product',
  3. 'query_builder' => function(EntityRepository $er) {
  4. return $er->createQueryBuilder('g')
  5. ->orderBy('g.position', 'DESC');
  6. },
  7. 'choice_label' => 'id'
  8. ));


Może da się jakoś dodać do zapytania WHERE id = {ID_Z_FORMULARZA} po przez "use" w funkcji?
Damonsson
O ile dobrze zrozumiałem co chcesz osiągnąć, to znany problem, ten Bundle powinien Ci go rozwiązać: https://github.com/Gregwar/FormBundle (nie wiem jak z Symfony 3, może jest to już natywnie?)
wujek2009
Chcę po prostu sprawdzić czy jeżeli mamy polę np. "Wybierz produkt" to czy użytkownik faktycznie wybrał ID produktu istniejącego czy manipilował w jakiś sposób przy formularzu i próbuje mi wstrzyknąć jakiś złośliwy kod :-)
Tak czy inaczej udało mi się osiągnąć to po przez zwykły zapis:

  1. $builder->add('id_product', EntityType::class, array(
  2. 'class' => 'John\ProductBundle\Entity\Product',
  3. 'choice_label' => 'id'
  4. ));


Więc obyło się bez QB :-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.