Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Symfony 1.4 - lista formularzy w edycji
Forum PHP.pl > Forum > PHP
damianooo
Witam,

Mam dwa pytania:

1)

Jeśli w akcji executeIndex pobieram kolekcję obiektów do zmiennej $books w ten sposób:

  1. $books = BookTable::getInstance()->findById(3);


I następnie tworzę sobie nowy formularz, do którego przekazuję kolekcję obiektów w ten sposób:

  1. $this->form = new BookForm($books);


Dostaję następujący komunikat o błędzie:

  1. The "BookForm" form only accepts a "Book" object.


Rozumiem z tego, że mogę przekazać tylko jeden pojedynczy obiekt.

W jaki sposób mogę przekazać listę obiektów aby wyświetlić każdy pojedynczy formularz z danymi jeden pod drugim oczywisćie w stanie edycji ?

2)

Jak mogę w formularzu edycyjnym zmienić kolejność i wygląd wyświertlanych pól? Obecnie domyślnie Symfony (1.4) wyświetla mi pola jedno pod drugim. Jak mogę zrobić tak żeby pola wyświetlane mieć jedno obok drugiego , albo część pól w jednej kolumnie a część w drugiej kolumnie ?

dzięki
toffiak
Ad 2
Każde pola formularza można wyświetlać osobno http://www.symfony-project.org/forms/1_4/e...r-web-Designers

Ad 1
Jeżeli chcesz edytować obiekty klasy Book to najłatwieszym sposobem jest stworzenie tabeli z formularzami a następnie wyświetlenie ich.
Jeśli obiekty klasy Book byłyby powiązane z innym obiektem można stworzyć formularz edycji dla tego obiektu i umieścić formularze dla obiektu Book wewnątrz głównego formularza http://www.symfony-project.org/more-with-s...-Advanced-Forms.
damianooo
@toffiak - Napisałeś coś takiego:

Cytat
Jeżeli chcesz edytować obiekty klasy Book to najłatwieszym sposobem jest stworzenie tabeli z formularzami a następnie wyświetlenie ich.


możesz mi podać przykład co masz na myśli mówiąc stworzenie tabeli z formularzami ?

pewnie miałeś na myśli tablicę z formularzami a nie tabelę z formularzami ... ?

Jak zrobię tak w AKCJI :

  1. $this->books = BookTable::getInstance()->findById(3);
  2. $this->a = array();
  3. foreach ($this->books as $bok){
  4. $this->a = new BookForm($bok);;
  5. }


a tak w WIDOKU:

  1. <?php foreach ($a as $bk): ?>
  2. <form>
  3. </form>
  4. <?php endforeach; ?>



to wyświetla mi się kolejno 12 formularzy a powinny tylko 4 ...

czemu tak się dzieje że mam powieloną 3krotnie ilość formularzy w liście w widoku ?

dobrze to w ogóle robię ? dzięki za podpowiedz
toffiak
Nie wiem czy to tylko literówka w podanym przykładzie ale powinno być z nawiasami kwadratowymi:
  1. $this->books = BookTable::getInstance()->findById(3);
  2. $this->a = array();
  3. foreach ($this->books as $bok){
  4. $this->a[] = new BookForm($bok);;
  5. }


Sprawdź ile właściwie jest obiektów "books", ztego co pamiętam to sprawdzało się to tak.
  1. $this->books->count();

Formularzy nie może być większa ilość niż pobranych obiektów.
damianooo
wilkie dzięki ... wszystko działa ... rozwiązanie wygląda następująco:

w formularzu MyBookForm dziedziczę po BookForm i w metodzie configure robię tak:

  1. class MyBookForm extends BookForm
  2. {
  3.  
  4. public function configure()
  5. {
  6.  
  7. parent::configure();
  8.  
  9. }
  10.  
  11. }


w akcji robię tak:

  1. public function executeIndex(sfWebRequest $request)
  2. {
  3. $this->books = BookTable::getInstance()->findById(3);
  4. $this->book = array();
  5. foreach ($this->books as $bok) {
  6. $this->bok[] = new MyBookForm($mag);
  7. }
  8. }


natomiast w widoku robię po prostu tak:

  1. <?php foreach ($bok as $b):?>
  2.  
  3. <form action="<?php echo url_for('book/save');?>" method="POST">
  4. <table>
  5. <tr>
  6. <?php echo $b['name'] ?>
  7. </tr>
  8. <tr>
  9. <?php echo $b['secured'] ?>
  10. </tr>
  11. <tr>
  12. <td colspan="2">
  13. <input type="submit" value="Save"/>
  14. </td>
  15. </tr>
  16. </table>
  17. </form>
  18.  
  19. <?php endforeach;?>



pozdrawiam
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.