Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]Problem z formularzem
Forum PHP.pl > Forum > PHP > Frameworki
Vion
Witam
Mam taki problem. Stworzyłem formularz przez CRUD. Wygenerował mi on taki formularz dodawania nowego miasta
  1. <h1>City creation</h1>
  2.  
  3. <form action="{{ path('city_create') }}" method="post" {{ form_enctype(form) }}>
  4. {{ form_widget(form) }}
  5.  
  6.  
  7. <p>
  8. <button type="submit">Create</button>
  9. </p>
  10. </form>
  11.  
  12. <ul class="record_actions">
  13. <li>
  14. <a href="{{ path('city') }}">
  15. Back to the list
  16. </a>
  17. </li>
  18. </ul>



i wszystko ładnie działa, dodaje miasto do bazy. ale gdy zamienię ten formularz na taki, to już nie dodaje mi do bazy. Nie wyświetla też żadnego błędu.

  1. <h1>City creation</h1>
  2.  
  3. <form action="{{ path('city_create') }}" method="post" {{ form_enctype(form) }}>
  4. {{ form_widget(form.name) }}
  5.  
  6.  
  7. <p>
  8. <button type="submit">Create</button>
  9. </p>
  10. </form>
  11.  
  12. <ul class="record_actions">
  13. <li>
  14. <a href="{{ path('city') }}">
  15. Back to the list
  16. </a>
  17. </li>
  18. </ul>


z tego co ustaliłem to formularz chyba nie przechodzi walidacji w kontrolerze. Co zrobiłem źle.
o to akcja odpowiedzialna za dodanie nowego miasta

  1. public function createAction(Request $request)
  2. {
  3.  
  4. $entity = new City();
  5. $form = $this->createForm(new CityType(), $entity);
  6. $form->bind($request);
  7. if ($form->isValid()) {
  8. $em = $this->getDoctrine()->getManager();
  9. $em->persist($entity);
  10. $em->flush();
  11. return $this->redirect($this->generateUrl('city_show', array('id' => $entity->getId())));
  12. }
  13.  
  14. return $this->render('HongeroDishBundle:City:new.html.twig', array(
  15. 'entity' => $entity,
  16. 'form' => $form->createView(),
  17. ));
  18. }
Crozin
Prawdopodobnie przyczyną jest brak tokenu CSRF. Nawet jeżeli jawnie wygenerujesz każde z pól formularza, nadal powinieneś użyć {{ form_rest(form) }} w celu wygenerowania "pobocznych" elementów.
Vion
ale, nie chce aby generowało mi w widoku wszystkich pól
Crozin
Więc powinieneś skorzystać z innego typu dla formularza. Nie wyświetlają Ci się błędy, ponieważ generują się one dla elementów niepowiązanych bezpośrednio z form.name.
Vion
nie rozumiem, jak innego typu?
Crozin
Jeżeli nie chesz generować wszystkich (wymaganych) pól typu CityType powinieneś utworzyć nowy typ, dla formularza.
thek
Jeśli nie chcesz korzystać wprost z tej encji to utwórz sobie nowy Type i w nim określ interesujące Cię pola. Zależnie teraz od definicji encji (jeśli z niej korzystasz jako źródło danych) musisz zmodyfikować albo ją, albo walidator. Możesz także posłużyć się grupami walidacji by określić, które pola będą brane pod uwagę podczas niej. Jeśli chcesz by całość była jeszcze bardziej zintegrowana z tym typem, to możesz posłużyć się symfonowym mechanizmem tworzenia bloku formularza dla danego typu. Poczytaj o tworzeniu customowych themów dla typów wtedy. Świetne rozwiązanie dla ciutkę bardziej skomplikowanych, przykładowo zależnych selectów z autocomplete czy opartych o kolekcje.
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.