Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] własny formularz
Forum PHP.pl > Forum > PHP > Frameworki
AxZx
witam

chciałbym, a raczej muszę, zmodyfikować jedno pole w formularzu.
cała konfigurację formularza podałem w metodzie configure w klasie, która dziedziczy po sfForm.

pierwsze pytanie: czy można w jakiś sposób wprowadzić zmodyfikowany wiersz? oprócz zwykłego inputa chciałbym jeszcze w <td></td> dodać kilka rzeczy.

jeżeli tak się nie da to chciałbym móc zmodyfikować strukturę całego formularza.

problem polega na tym, że chciałbym móc zrobić coś takiego:
  1. <?php
  2. //akcja
  3. $form = new GrupaForm();
  4. //widok
  5. echo $form
  6. ?>


czyli nie modyfikować tego formularza w docelowym widoku tylko już wcześniej - po prostu chcę tam mieć już zmodyfikowany formularz;)
można nadpisać metodę __toString?
w tej metodzie return get_partial('grupa/zmodyfikowany_form');
tylko jak tam wtedy dobrać się do poszczególnych widgetów?
jakoś trzeba by przekazać do tego partiala ten obiekt formularza.

z góry dziękuję za pomoc.
strife
Nie wiem czy dobrze zrozumiałem, ale spróbujemy. Chcesz zmodyfikować istniejący formularz, z poziomu akcji z tego co pamiętam robi się to w mniej więcej takich sposób:

  1. <?php
  2. // ...
  3. $foo = $this->form->getWidget('foo'); // mamy obiekt formularza ktory mozemy modyfikowac
  4. // aby dodac
  5. $this->form->setWidget('foo', new sfWidgetFormInput());
  6. ?>


Piszę z pamięci, także wybacz błędy - ale zasadę działania tego mam nadzieję, że znasz. A jak chcesz dodać pomiędzy wierszami jakieś inne własne dane to możesz zamiast:

  1. <?php
  2. echo $form;
  3. ?>


Po kolei dodawać kolejne elementy,

  1. <form action="<?php echo url_for('contact/index') ?>" method="POST">
  2.  <table>
  3.    <?php echo $form['name']->renderRow() ?>
  4.    <?php echo $form['email']->renderRow() ?>
  5.    <?php echo $form['subject']->renderRow() ?>
  6.    <?php echo $form['message']->renderRow() ?>
  7.    <tr>
  8.      <td colspan="2">
  9.        <input type="submit" />
  10.      </td>
  11.    </tr>
  12.  </table>


Przykład z http://www.symfony-project.org/book/forms/...r-web-Designers. Krótko mówiąc poczytaj cały ten artykuł o formularzach.

Pozdrawiam.

PS. Przypuszczalnie chodzi Ci o to co napisałem w drugiej części mojego posta, ale nie chcę mi się już usuwać biggrin.gif
AxZx
tak, o to taką modyfikację chodzi.
ale chciałbym wiedzieć coś więcej:)


bo mam akcję w której formularze wybierane są dynamicznie - jedne chcę ręcznie zmodyfikować, a inne pójdą tak jak je render utworzy.
tak jak już napisałem:
  1. <?php
  2. //akcja
  3. $nazwa = $dynamiczna_nazwa.'Form';
  4. $form = new $nazwa();
  5. //widok
  6. echo $form
  7. ?>


i gdzieś pomiędzy akcją a widokiem chcę zmodyfikować ten formularz, tak żeby do widoku poszedł już zmodyfikowany.
póki co rozwiązałem to inaczej - dla każdego formularza stworzyłem osobny partial, jeżeli chce zmodyfikować formularz to robię to w tym partialu, jeśli nie piszę tam echo $form.
ale może jednak da się to zrobić na poziomie klasy formularza.
Cysiaczek
Ewentualne zmiany w obiektach sfForm możesz umieścić w filtrach poegzekucyjnych.
destroyerr
@Cysiaczek ale nie uważasz, że jest to całkowicie bezsensowne? Formularze przecierz udostępniają spore możliwości zmiany wyglądu, czy to za pomocą widżetów czy też za pomocą formatera (nie wiem jak to przetłumaczyć) więc cofanie się z filtrami do wersji 1.0 jest pomysłem, z mojego punktu widzenia, marnym
AxZx
Cytat(destroyerr @ 15.03.2009, 13:28:17 ) *
@Cysiaczek ale nie uważasz, że jest to całkowicie bezsensowne? Formularze przecierz udostępniają spore możliwości zmiany wyglądu, czy to za pomocą widżetów czy też za pomocą formatera (nie wiem jak to przetłumaczyć) więc cofanie się z filtrami do wersji 1.0 jest pomysłem, z mojego punktu widzenia, marnym


hmm to może wiesz jak dowolnie zmodyfikować obiekt form?smile.gif tzn jego poszczególny widgety?
poradziłem sobie tak jak już napisałem (dodatkowy widok) ale ta wiedza może się przydać w przyszłości.
destroyerr
Powiem szczerze, że niespecjalnie zrozumiałem co chcesz uzyskać, ale jeśli to co napisał phpion to możesz to zrobić korzystając z sfWidgetFormSchemaDecorator.
AxZx
Cytat(destroyerr @ 15.03.2009, 20:12:23 ) *
Powiem szczerze, że niespecjalnie zrozumiałem co chcesz uzyskać, ale jeśli to co napisał phpion to możesz to zrobić korzystając z sfWidgetFormSchemaDecorator.


np. chciałbym, żeby pod inputem była lista tagów, które może wpisać user.
albo żeby była mapka od google smile.gif po prostu dodatkowy kod html, JS, php.
pewnie ciężko by było coś takiego zrobić w klasie formularza, bo w końcu to ma być w widoku. dlatego bez dodatkowego pliku widoku się pewnie nie obejdzie - bo gdzieś trzeba wprowadzić ten dodatkowy kod.
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.