Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [SF2][Symfony2][Symfony] dodawanie wielu rekordów
damianooo
post 10.03.2014, 17:55:47
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


Witam

Potrzebuję zrobić formularz dodający wiele rekordów do bazy na raz. Jak to zrobić w Symfony 2 ? Znalazłem taki oto tutorial ale to chyba nie to:

http://symfony.com/doc/2.0/reference/forms...collection.html


Aby otrzymać taki formularz muszę w TWIGu też coś zmieniać czy tylko w samym wyglądzie formulrza i w akcji kontrolera ?



Dzięki
Go to the top of the page
+Quote Post
pyro
post 10.03.2014, 17:58:25
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


To jest dokładnie to, czego potrzebujesz.


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
damianooo
post 11.03.2014, 10:13:59
Post #3





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


ok, tylko że w FormBuilderze mam typ "entity" a nie "collection" ponieważ mam dzięki temu dostęp do listy wyboru z tabel join-owanych.

miałem tak:

  1. ->add('matchday', 'entity', array(
  2. 'class' => 'CosTamBundle:Matchday',
  3. 'property' => 'name'
  4. )
  5. )


i zmieniłem na tak:
  1. ->add('matchday', 'collection', array(
  2. 'type' => 'entity',
  3. 'options' => array(
  4. 'class' => 'CosTamBundle:Matchday',
  5. 'property' => 'name'
  6. ),
  7. ))


ale to nie działa (w sensie że znikło mi teraz pole wyboru)








Ten post edytował damianooo 11.03.2014, 11:53:11
Go to the top of the page
+Quote Post
pyro
post 11.03.2014, 11:54:13
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Zamiast entity ustaw collection z flagą allow_add (+ allow_delete?) i ustawionym typem (EDIT: ) i w FormBuilderze załaduj odpowiednie encje (EntityManager przekaż jako opcję)

Ten post edytował pyro 11.03.2014, 12:02:09


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
damianooo
post 11.03.2014, 12:01:42
Post #5





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


zrobiłem tak:

  1. ->add('matchday', 'collection', array(
  2. 'allow_add' => 'true',
  3. 'type' => 'entity',
  4. 'options' => array(
  5. 'class' => 'CosTamBundle:Matchday',
  6. 'property' => 'name'
  7. ),
  8. ))



typ ma być "entity" ?


a kontroler mam następujący:


  1. /**
  2.   * Displays a form to create a new Meet entity.
  3.   *
  4.   * @Route("/new", name="meet_new")
  5.   * @Template()
  6.   */
  7. public function newAction()
  8. {
  9. $entity = new Meet();
  10. $form = $this->createForm(new MeetType(), $entity);
  11.  
  12. return array(
  13. 'entity' => $entity,
  14. 'form' => $form->createView(),
  15. );
  16. }



Ten post edytował damianooo 11.03.2014, 12:03:38
Go to the top of the page
+Quote Post
pyro
post 11.03.2014, 12:03:48
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Nie. chcesz mieć zbiór formularzy, a nie zbiór list rozwijalnych:

  1. ->add('matchday', 'collection', array(
  2. 'allow_add' => true,
  3. 'type' => new MatchdayType(),
  4. ))


Ten post edytował pyro 11.03.2014, 12:04:57


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
damianooo
post 11.03.2014, 12:08:15
Post #7





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


Tzn. chcę mieć tak:

rząd1 (pole: team1(typ:text) ; pole team2(typ:text) ; pole: matchday(typ:pole_rozwijalne)
rząd2 (pole: team1(typ:text) ; pole team2(typ:text) ; pole: matchday(typ:pole_rozwijalne)
rząd3 (pole: team1(typ:text) ; pole team2(typ:text) ; pole: matchday(typ:pole_rozwijalne)
...
rząd20 (pole: team1(typ:text) ; pole team2(typ:text) ; pole: matchday(typ:pole_rozwijalne)


button: submit

Ten post edytował damianooo 11.03.2014, 12:08:52
Go to the top of the page
+Quote Post
pyro
post 11.03.2014, 12:10:11
Post #8





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


No to właśnie Ci dokładnie podałem jak taki zbiór zainicjować ;p


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
damianooo
post 11.03.2014, 12:14:59
Post #9





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


ok, ale nie wiem czemu znikło mi teraz pole rozwijalne. Rozumiem że pozostałem pola formularza też muszę ustawić na typ "collection" ?

Nie zrozumiałem tego:

Cytat
i ustawionym typem (EDIT: ) i w FormBuilderze załaduj odpowiednie encje (EntityManager przekaż jako opcję)


Ten post edytował damianooo 11.03.2014, 12:15:23
Go to the top of the page
+Quote Post
pyro
post 11.03.2014, 12:16:25
Post #10





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Czy to jest formularz edycji (która w tej kolekcji ma już jakieś dane) czy formularz tworzenia nowej encji?


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
damianooo
post 11.03.2014, 12:19:03
Post #11





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


formularz tworzenia (new). potrzebuję na stronie wyświetlić takich 20 , następnie wypełnić je danymi i klikając przycisk button ma mi zapisać to jako 20 nowych rekordów do bazy danych.
Go to the top of the page
+Quote Post
pyro
post 11.03.2014, 12:20:12
Post #12





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


No to wystarczy tylko zrobić to:

Cytat(pyro @ 11.03.2014, 12:03:48 ) *
  1. ->add('matchday', 'collection', array(
  2. 'allow_add' => true,
  3. 'type' => new MatchdayType(),
  4. ))



--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
damianooo
post 11.03.2014, 12:23:32
Post #13





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


ok a co teraz z kontrolerem i widokiem ?
Próbowałem to zrobić tak:


  1. /**
  2.   * Displays a form to create a new Meet entity.
  3.   *
  4.   * @Route("/new", name="meet_new")
  5.   * @Template()
  6.   */
  7. public function newAction()
  8. {
  9. $meets = array();
  10. for ($i = 0; $i < 20; $i++) {
  11. $meets[] = new Meet();
  12. }
  13.  
  14. $entity = new Meet();
  15. $form = $this->createForm(new MeetType(), $meets);
  16.  
  17. return array(
  18. 'entity' => $meets,
  19. 'form' => $form->createView(),
  20. );
  21. }



ale to tak nie działa
Go to the top of the page
+Quote Post
pyro
post 11.03.2014, 12:27:06
Post #14





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


W kontrolerze nie tworzysz nowych formularzy. To w widoku tworzysz nowe formularze z pomocą prototypu i JS:

Kod
{{ form_widget(form.something.vars.prototype) }}


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
damianooo
post 11.03.2014, 12:30:30
Post #15





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


właśniei chciałbym uniknąć js-a . W tym przykładzie z linka jest opisany ten właśnie sposób z zastosowaniem js. Nie da się tego zrobić inaczej ?
Go to the top of the page
+Quote Post
pyro
post 11.03.2014, 12:33:11
Post #16





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


No to przecież masz prototyp. Wyświetl go 20 razy.


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
damianooo
post 11.03.2014, 12:42:32
Post #17





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


tak ?


  1. <form action="{{ path('meet_create') }}" method="post" {{ form_enctype(form) }}>
  2.  
  3. {% for i in 0..20 %}
  4. {{ form_widget(form.matchday[i].vars.prototype) }}
  5. {{ form_widget(form.season[i].vars.prototype) }}
  6. {{ form_widget(form.position[i].vars.prototype) }}
  7. {% endfor %}
  8. <p>
  9. <button type="submit">Create</button>
  10. </p>
  11. </form>



nie działa sad.gif
Go to the top of the page
+Quote Post
pyro
post 11.03.2014, 12:46:34
Post #18





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Matko bosko! Czy Ty czytasz w ogóle o czym piszę? Nawet gotowy fragment kodu Ci podałem.

// EDIT

Poza tym te "prototype" jest tutaj źle użyte. Dokumentacja nie boli.

// EDIT 2

a od 0 do 20 jest 21 liczb a nie 20 jak na mój gust wink.gif

Ten post edytował pyro 11.03.2014, 12:47:49


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
damianooo
post 11.03.2014, 12:51:37
Post #19





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


21 smile.gif .... zgadza się , ale to bym zauważył wcześniej czy później.

Wg przykładu z dokumentacji u mnie musiałoby to być tak:

  1. <form action="{{ path('meet_create') }}" method="post" {{ form_enctype(form) }}>
  2.  
  3. <ul data-prototype="{{ form_widget(form.matchday.vars.prototype) | e }}"
  4. {% for matchdayField in form.matchday %}
  5. <li>
  6. {{ form_errors(matchdayField) }}
  7. {{ form_widget(matchdayField) }}
  8. </li>
  9. {% endfor %}
  10. </ul>
  11.  
  12. <p>
  13. <button type="submit">Create</button>
  14. </p>
  15. </form>



ale to też nie tak sad.gif
Go to the top of the page
+Quote Post
pyro
post 11.03.2014, 12:54:56
Post #20





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Sam powiedziałeś, że w dokumentacji jest przykład z JS, a Ty nie chcesz używać JS.

Kurde. Po prostu wyświetl prototyp 20 razy. Gdzie tutaj widzisz jakąś filozofię biggrin.gif ?


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 15:53