Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]forms
Forum PHP.pl > Forum > PHP > Frameworki
Lonas
Jak mogę utworzyc 2 formularze na podstawie jednego modelu, ale tak zeby te formularze mialy inne nazwy.

  1. <?php
  2. $this->form = new CategoryTreeForm();
  3. $this->form2 = new CategoryTreeForm();
  4. ?>


zeby w wyniku dostac
  1. <input id="category_tree1_name" type="text" name="category_tree1[name]"/>
  2. <input id="category_tree2_name" type="text" name="category_tree2[name]"/>
Crozin
Dodaj do tego formularza konstrutkor, który będzie przyjmował jeden parametr (nazwę). Następnie w metodzie configure() przy pomocy
  1. <?php
  2. $this->widgetSchema->setCOS_TAM('nazwa_elementu', 'wartosc');
  3. ?>
powinieneś móc to ustawić.
Lonas
Tutaj tworzone są nazwy pól z formularza

  1. <?php
  2. $this->widgetSchema->setNameFormat('category_lang[%s]');
  3. ?>


Tylko nie za bardzo wiem jak to zrobic w kontrolerze tworze sobie dynamicznie forumlarz w zaleznosci od tego ile jest jezykow w bazie:

  1. <?php
  2. $c = new Criteria();
  3.    $c -> add(LanguagesPeer::ID,1,Criteria::NOT_EQUAL);  //wszystkie poza 1 jezykiem czyli pl
  4.    $this->langs =  LanguagesPeer::doSelect($c);
  5.    
  6.    
  7.    
  8.    if(COUNT($this->langs) > 0 ){
  9.      foreach($this->langs as $lang){
  10.        $form = "form".$lang -> getName();
  11.        $this->$form = new CategoryLangForm();
  12.      }
  13. ?>
osl
Przecież Crozin Ci napisał smile.gif
w konstruktorze formularza dodajesz parametr, powiedzmy $version i potem robisz tak:
  1. <?php
  2. $this->widgetSchema->setNameFormat('category_lang'.$version,'[%s]');
  3. ?>


a w kontrolerze:
  1. <?php
  2. if(COUNT($this->langs) > 0 ){
  3.     $version=0;
  4.     foreach($this->langs as $lang){
  5.       $form = "form".$lang -> getName();
  6.       $this->$form = new CategoryLangForm($version);
  7.       $version++;
  8.     }
  9. ?>
Lonas
Teraz rozumiem smile.gif dzieki

EDIT : ale to tak napewno działa ? bo tworzac formularz

  1. <?php
  2. $this->$form = new CategoryLangForm($version);
  3. ?>


gdzie $version jest np 1 to on chce utworzyc formularz tak jakby z danymi do edycji o id 1
destroyerr
Eee... a nadpisałeś konstruktor? Jeśli tak to jak?
A w akcji też możesz to przecierz zrobić:
  1. <?php
  2. $this->form->getWidgetSchema()->setNameFormat('category_lang'.$version,'[%s]');
  3. ?>
Lonas
W klasie BaseCategoryLangForm dodałem


  1. <?php
  2. $this->widgetSchema->setNameFormat('category_lang'.$version,'[%s]');
  3. ?>


a w kontrolerze chcialem tworzyc formularz z parameterm $version

destroyerr: ale działa tak jak napisałeś przy ustawieniu tego w akcji.


EDIT:
A jak moge zrobic cos takiego :

Tworze sobie formularze w petli :
  1. <?php
  2.      foreach($this->langs as $lang){
  3.        $this->forms[$lang -> getName()]= new CategoryLangForm();
  4.        $this->forms[$lang -> getName()]->getWidgetSchema()->setNameFormat('category_lang_'.$lang -> getName().'[%s]');
  5.      }
  6. ?>


ale nie moge odebrac danych z tego formularza a robie to tak :

  1. <?php
  2. foreach($this->langs as $lang)
  3.      {
  4. $form1 = new CategoryLangForm();
  5.        $form1 ->getWidgetSchema()->setNameFormat('category_lang_'.$lang -> getName().'[%s]');
  6.        $form1 ->bind($request->getParameter('category_lang_'.$lang -> getName()), $request->getFiles('category_lang_'.$lang -> getName()));
  7.  
  8.         print_r($form1 ->getValues());
  9.      
  10.      }
  11. ?>


dostaje puste tablice bez pol z formularza

dodam że to :

  1. <?php
  2. print_r($request->getParameter('category_lang_'.$lang -> getName()));
  3. ?>


zwraca mi tablice

  1. Array ( [name] => ang [description] => ang [tags] => ang ) Array ( [name] => de [description] => de [tags] => de )


wszystkie dane przekazywane w POST

  1. Array
  2. (
  3. [category_tree] => Array
  4. (
  5. [id] =>
  6. [category_id] => 1
  7. [type_id] => 1
  8. [name] => pl
  9. [description] => sdfsdf
  10. [tags] => sdsd
  11. )
  12.  
  13. [category_lang_english] => Array
  14. (
  15. [id] =>
  16. [lang_id] => 2
  17. [category_id] =>
  18. [name] => ang
  19. [description] => ang
  20. [tags] => ang
  21. [is_visible] => on
  22. )
  23.  
  24. [category_lang_german] => Array
  25. (
  26. [id] =>
  27. [lang_id] => 3
  28. [category_id] =>
  29. [name] => d
  30. [description] => ded
  31. [tags] =>
  32. )
  33.  
  34. )


formularz category_tree jest dobrze bind-owany a 2 pozostale nie chca :/
Crozin
Łatwiej powinno być Ci operować na tym, gdyby pola formularza miały format:
category_lang[english][nazwa_pola]
Lonas
Próbowałem tak ale bind nie dziala - nie moge powiązać danych z formularza z formularzem
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.