Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][SF2][Symfony2]Dodanie walidacji do formularza nie używającego encji
Crash89
post
Post #1





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

Ostrzeżenie: (0%)
-----


Chcę tutaj porównać jedną daną pobraną w przesyłanym formularzu z drugą.
Wyczytałem gdzieś że do rozwiązania tego problemu, przy tworzeniu formularza FormType należy wykorzystać obiekt Callback, konstrukcja wygląda mniej więcej tak:
  1. use Symfony\Component\Validator\ExecutionContextInterface;
  2. use Symfony\Component\Validator\Constraints\Callback;
  3.  
  4.  
  5. public function buildForm(FormBuilderInterface $builder, array $options)
  6. {
  7. $builder->add('pole','type',array(
  8. 'mapped' => false,
  9. 'constraints' => array(
  10. new Callback(array($this,'validate')
  11. ))));
  12. // i treść funkcji validate
  13.  
  14. public function validate(ExecutionContextInterface $context){
  15. if($data['pole1'] >= $data->['pole2']){
  16. $context->addViolation("Tekst błędu");
  17. }
  18. }
  19.  


Problem w tym że nie wiem gdzie mam umieścić funckję validate.
Umieszczałem ją w FormType i nie działa, także próbowałem w kontrolerze, ale tam też jakoś na to nie reaguje.
Przy formularzu wykorzystującym entity, umieszczam ją w entity i wszystko działa, ale tutaj nie mam takiej klasy.



Więc, gdzie umieścić tą funkcję? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crash89
post
Post #2





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

Ostrzeżenie: (0%)
-----


Cytat(blahy @ 17.07.2015, 18:42:27 ) *
jest ok, ale jesli ta metoda walidacji ma dotyczyc calego formularza (bo uzywa wiekszej ilosci pol) to moze byc lepszym pomyslem dodanie walidatora do calego formularza, a nie do pojedynczego pola.

Do klasy FormType mozna dodac metode:
  1. public function setDefaultOptions(OptionsResolverInterface $resolver) {
  2. $resolver->setDefaults(array(
  3. 'constraints' => array(
  4. new Callback(array($this,'validate'))
  5. ),
  6. ));
  7. }


Wtedy w metodzie validate w 1 argumencie dostaniemy array z wszystkimi polami z formularza (pola nie powinny miec mapped => false, i tak nie przekazujemy obiektu):

  1. public function validate($value, ExecutionContextInterface $ec)
  2. {
  3. var_dump($value); // array(1) { ["pole"]=> string(3) "fff" }


Używając powyższej metody, zwraca mi komunikat podobny do: "cannot use DateTime as Array".
Co jest dziwne, bo gdy porównuje te wartości z $value['pole1'] z $form->get('pole1')->getData() przez var_dump(), są takie same.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 23:25