Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony]Formularze wbudowane
SnakeEater
post 31.03.2010, 11:27:06
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 12.03.2010

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


Witam,
Mam formularz wbudowany i problem jest taki, ze działa dobrze tylko przy akcji new. przy akcji edit jest źle (nie wyświetlają się dane z formularzy wbudowanych), czemu się specjalnie nie dziwię, gdyż w configure AnswerCollForm mam
  1. for ($i = 0; $i < $this->getOption('size', 3); $i++)
  2. {
  3. $answer = new Answer();
  4. $answer->Question = $question;
  5. $answerForm = new AnswerForm($answer);
  6. $this->embedForm($i, $answerForm);
  7. }


Czy jest jakaś możliwość wykrycia w formie jaka jest aktualnie akcja, czy trzeba to zrobić poprzez parent->getChildren() (Jeżeli nie zwraca to znaczy to jest to new i idzie kod powyższy, a jak zwraca to jest akcja edit i tworzymy na podstawie danych)?

Ten post edytował SnakeEater 31.03.2010, 11:29:51
Go to the top of the page
+Quote Post
Berg
post 31.03.2010, 11:34:25
Post #2





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

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


  1. sfContext::getInstance()->getActionName()

winksmiley.jpg
Go to the top of the page
+Quote Post
destroyerr
post 31.03.2010, 12:26:23
Post #3





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


sfContext::getInstance() powinno być omijane tak szerokim łukiem jak to tylko możliwe. Możesz przekazać nazwę akcji z kontrolera do formularza, wykorzystując na przykład opcje tego drugiego.
Możesz to zrobić bardziej symfony way i sprawdzić czy obiekt $question jest nowy czy też nie.
Go to the top of the page
+Quote Post
SnakeEater
post 31.03.2010, 12:53:10
Post #4





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 12.03.2010

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


Dziękuję jeszcze bardziej. Tak przy okazji mam pytanie. To drobnostka, więc nie chcę zakładać nowego wątku. Jak już dodam wpis i mam ustawione przekierowanie na akcję edit to mam problem.
(metoda configure)
  1. if($question->isNew())
  2. {
  3. ....
  4. }
  5. else
  6. {
  7. $options = $question->getOptions(); // lub $question->Options;
  8. ...
  9. }

Czemu nie pobiera mi mi tych options z bazy? W bazie ustawione foreign key i rekordy są dodane a klucze się zgadzają, więc czemu to nie działa? Wiem, że to kolejne głupie pytanie, ale nie mogłem znaleźć rozwiązania. Czy trzeba robić zapytanie do tabeli? Jeżeli tak to po co te Options (alias) są?

Ten post edytował SnakeEater 31.03.2010, 12:59:47
Go to the top of the page
+Quote Post
Berg
post 31.03.2010, 13:23:24
Post #5





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

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


$question to jest obiekt formularza czy obiekt modelu? Jeśli formularza to getOptions pobiera opcje dla danego formularza i w żadnym przypadku nie robi zapytań SQL. Zakładam że masz tabelę options w bazie danych i chcesz pobrać jej wartość, w takim przypadku będzie to wyglądało tak:
  1. if(!$this->isNew()) { // Następuje edycja formularza
  2. $options = $this->getObject()->getOptions(); // Pobieram wartość options edytowanego rekordu
  3. }

Jeśli nie o to Ci chodzi to najlepiej powiedz jaki dokładnie chcesz uzyskać efekt i podrzuć kod dla metody configure.
Go to the top of the page
+Quote Post
SnakeEater
post 31.03.2010, 13:37:58
Post #6





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 12.03.2010

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


metoda configure AnswerOptionsForm
  1. public function configure()
  2. {
  3. if (!$question = $this->getOption('question'))
  4. {
  5. throw new InvalidArgumentException('You must provide a question object');
  6. }
  7. if($question->isNew())
  8. {
  9. for ($i = 0; $i < $this->getOption('size', 3); $i++)
  10. {
  11. $answerOption = new AnswerOption();
  12. $answerOption->Question = $question;
  13. $answerOptionForm = new AnswerOptionForm($answerOption);
  14. $this->embedForm($i, $answerOptionForm);
  15. }
  16. }
  17. else
  18. {
  19. $options = $question->getOptions();
  20. $a = 1; //****
  21. }
  22. }

no i w debug przy zatrzymaniu na **** pokazuje mi options jako array ale nie ma tam żadnych danych, wygląda to tak:
$options
name -> Question
tablename -> question
...
type ->INNODB
Wygląda jak tabela(?).
Question natomiast jest ok, w dziale data są wartości i pokazuje jako object.

Już działa. Był jednak jakiś konflikt nazewnictwa. Zmieniłem alias na AnswerOptions i już działa ok. Sorry for any inconvenience.

Ten post edytował SnakeEater 31.03.2010, 14:41:12
Go to the top of the page
+Quote Post

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: 14.06.2025 - 12:56