Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF3][SF] Zmiana pola formularza po submit
Forum PHP.pl > Forum > PHP > Frameworki
nospor
Hejka, mam formularz gdzie do jednego pola wkladam jakis tekst, wysylam forma, i jak wszystko ok, to do drugiego pola chcialbym wlozyc przetworzony tekst.
Niestety Symfony pluje mi bledem:
Cytat
You cannot change the data of a submitted form.

Komunikat rozumiem. Nie wiem jednak jak mam to obejsc. Czytalem o roznych POST_SUBMIT itp. ale to za bardzo nie sprawdza sie w moim przypadku. Jakies wskazowki?

  1. $form = $this->createForm(jsonDecodeType::class);
  2. $form->handleRequest($request);
  3.  
  4. if ($form->isValid()) {
  5. $data = $form->getData();
  6. try {
  7. //ta funkcja na podstawie jednego pola z formularza zwroci mi tekst, jaki mam wlozyc do drugiego pola
  8. $resultText = $this->decode($data);
  9.  
  10. //to mi rzuci: You cannot change the data of a submitted form.
  11. $form->get('destination')->setData($resultText);
  12.  
  13. } catch (ErrorException $e) {
  14. $error = new FormError($e->getMessage());
  15. $form->addError($error);
  16. }
  17. }
Crozin
Mógłbyś opisać co chciałbyś ostatecznie osiągnąć? Bo mam nieodparte wrażenie, że powinieneś jednak mieć dwa różne formularze.
nospor
Nie przecze, ze zrobilem cos w niezgodzie ze sztuka smile.gif
Ok, a wiec mam forma:
  1. public function buildForm(FormBuilderInterface $builder, array $options)
  2. {
  3. $builder
  4. ->add(
  5. 'source',
  6. TextareaType::class,
  7. $this->getAreaOptions(['attr' => ['placeholder' => 'label.decode_source']])
  8. )
  9. ->add(
  10. 'button',
  11. SubmitType::class,
  12. ['label'=>'action.decode']
  13. )
  14. ->add(
  15. 'destination',
  16. TextareaType::class,
  17. $this->getAreaOptions(['required' => false, 'attr' => ['placeholder' => 'label.decode_destination', 'disabled' => true]])
  18. );
  19. }

Jak widac ma on dwa pola source i destination. W source user wstawia jakis tekst, klika submit i w destination ma mu sie wstawic zdekodowany tekst

edit: gdy dodam:
  1. $builder->get('destination')->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) {
  2. $source = $event->getForm()->getParent()->get('source')->getData();
  3. //tu cos robie z source a potem wpisuje do destination
  4. $event->setData($source);
  5. });

to mi ladnie wstawia wartosc do destination na podstawie tego co bylo w source, ale nie jestem przekonany czy to jest miejsce na to.
Crozin
Ale skoro pole destination nie jest w ogóle na dobrą sprawę częścią formularza, po co je do niego wrzucasz? Dlaczego formularz nie składa się po prostu z pola SRC i BTN?
nospor
Wiem, ale dzieki temu mam szablon na cała mase innych formow: source i destination - i mi sie to wszystko ladnie wyswietla w jednym szablonie.
ohm
Powinieneś to raczej przechwycić przez Form Event i tam ewentualnie modyfikować formularz. Tyle że musiałbyś wrzucić do formularza ten dekoder.
Spróbuj przy POST_SUBMIT zmienić dane danego pola
https://symfony.com/doc/current/components/...orm_events.html
nospor
@ohm tak, jak widac w postach wyzej po edycji, tak wlasnie zrobilem
@Crozin w sumie zmodyfikowalem {% block form_widget_compound %} i mam to co chcialem smile.gif
ohm
Ah, nie widziałem że edytowałeś. Tak, to jest dobre miejsce na takie rzeczy smile.gif
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.