Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][SF2][SF] Jak dodac jednoczesnie do bazy 10 rekordow ?
Forum PHP.pl > Forum > PHP > Frameworki
damianooo
Jak najprosciej dodac 10 rekordow na raz do bazy danych uzywajac do tego formularza w TWIGu ?

Probowalem w Kontrolerze zrobic tak:

  1. public function newAction(){
  2. $test = new Test();
  3. $form = $this->createForm(new TestType, $test);
  4.  
  5. return array(
  6. 'test' => $test,
  7. 'form' => $form->createView(),
  8. );
  9. }


a w TWIGu tak:

  1. {% for i in 0..10 %}
  2. {{ form_start(form) }}
  3. {{ form_row(form.name) }}
  4. {{ form_end(form) }}
  5. {% endfor %}



Wyswietla mi sie tylko jedno pole a powinno 10 takich pol.

Co robie zle ?
ohm
Robisz jeden główny formularz i główne entity, do tego podpinasz collection of forms (lub samo collection of forms)
damianooo
glowny formularz i glowne entity mam .
Co znaczy podpinam collection of forms ?

Mozesz pokazac przykladowo ?

Dzieki
ohm
https://symfony.com/doc/current/cookbook/fo...ollections.html

Możesz zrobić dynamiczne podpinanie przez jquery lub bawić się w ręczne ustalanie ilości.
damianooo
hmm ... zrobilem tak:

Klasa formularza:

  1. use Symfony\Component\Form\AbstractType;
  2. use Symfony\Component\Form\FormBuilderInterface;
  3. use Symfony\Component\OptionsResolver\OptionsResolverInterface;
  4. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  5.  
  6. class TestType extends AbstractType
  7. {
  8. /**
  9.   * @param FormBuilderInterface $builder
  10.   * @param array $options
  11.   */
  12. public function buildForm(FormBuilderInterface $builder, array $options)
  13. {
  14. $builder
  15. ->add('name',CollectionType::Test);
  16. ));
  17. }
  18. }


Kontroler:

  1. public function newAction(){
  2. $test = new Test();
  3. $form = $this->createForm(TestType::Test, $test);
  4.  
  5. return array(
  6. 'test' => $test,
  7. 'form' => $form->createView(),
  8. );
  9. }


TWIG:

  1. {{ form_start(form) }}
  2. {% for i in 0..10 %}
  3. <li>{{ form_row(form.name) }}</li>
  4. {% endfor %}
  5. {{ form_end(form) }}


Wywala mi niestety blad:

  1. Error: Undefined class constant 'Test' in /var/www/costam/src/My/CostamBundle/Controller/MainController.php line 77
404
  1. TestType::class
w createForm.
damianooo
nie wiem czemu nie da sie tego tak zapisac .

Jak zmienie z :

  1. $form = $this->createForm(TestType::Test, $test);


na

  1. $form = $this->createForm(TestType::class, $test);


to podswietla mi sie w NetBeansie ta linia kodu z komunikatem:

  1. Syntax error.
  2. Unexpected: class
  3. after::
  4. expected: identifier, variable,{,define,$
  5. POSSIBLE Synax Error (check preceding valid synax error)
404
Albo to błąd Netbeans albo masz w nim ustawioną wersję PHP mniejszą niż 5.5.
damianooo
ok jest lepiej ... ale cos nie tak z TWIG.

czemu jak w TWIG zrobie tak:

  1. {{ form_start(form) }}
  2. {% for i in 0..10 %}
  3. <li>{{ i }} {{ form_row(form.guestType) }}</li>
  4. {% endfor %}
  5. {{ form_end(form) }}



to wyswietla mi sie :

  1. 0
  2. name
  3. 1
  4. 2
  5. 3
  6. 4
  7. 5
  8. 6
  9. 7
  10. 8
  11. 9
  12. 10


?

Celem bylo otrzymanie 10 takich samych pol "name".
Jak to powinienem w TWIG zapisac ?

jak w Twigu powinienem to zapisac ?
Turson
Renderując kilka razy to samo pole miałbyś powielone id oraz name i zapewne dlatego to niemożliwe
damianooo
ok ale skoro uzywam w formularzu Kolekcji:

  1. public function buildForm(FormBuilderInterface $builder, array $options)
  2. {
  3. $builder
  4. ->add('name',CollectionType::Test);
  5. ));
  6. }


to chcialbym ja jakos w Twigu wyswietlic

jak to u mnie powinno wygladac ?
Turson
Powinieneś mieć CollectionType::class zamiast ::Test
damianooo
Wasnie nie moge tak poniewaz pracuje na wersji Symfony 2.6 a to jest od wersji 3.0 .
Probowalem tak (powyzej pisalem o bedzie) .

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.