Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]Formularze wbudowane
Forum PHP.pl > Forum > PHP > Frameworki
SnakeEater
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)?
Berg
  1. sfContext::getInstance()->getActionName()

winksmiley.jpg
destroyerr
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.
SnakeEater
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ą?
Berg
$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.
SnakeEater
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.
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.