Aleksander Wikiński student
Temat: i18n - nie moge usunac pol z formularza
Mój plik schema.yml:
Firm:
actAs:
I18n:
fields: [description, address]
columns:
id_firm:
type: integer(1)
primary: true
autoincrement: true
email:
type: string(100)
notnull: true
description:
type: clob
notnull: true
address:
type: clob
Symfony wygenerował takie dwie tabele:
firm:
id_firm
firm_translation:
id_firm
description
address
lang
Akcja:
public function executeEdit_contact(sfWebRequest $request)
{ $firm = Doctrine::getTable('Firm')->find($this->id_firm);
$this->form = new ContactForm($firm); }
Formularz:
class ContactForm extends sfFormDoctrine
{
public function configure()
{
unset(
$this['description']
);
$this->embedI18n(array('pl', 'en'));
$this->widgetSchema->setLabel('pl', 'Polish');
$this->widgetSchema->setLabel('en', 'English');
}
}
Próbuję usunąć z formularza pola 'description' ale nie mogę jakoś za pomocą unset(), co jest ? dlaczego ?Aleksander Wikiński edytował(a) ten post dnia 07.11.09 o godzinie 21:25
Adam
W.
www.fotomody.pl
fotografia mody, IT
Temat: i18n - nie moge usunac pol z formularza
Aleksander Wikiński:
Próbuję usunąć z formularza pola 'description' ale nie mogę jakoś za pomocą unset(), co jest ? dlaczego ?
bo description jest w formularzu dołączonym, czyli do niego musiałbyś się dostać.
spróbuj coś takiego:
Adam W. edytował(a) ten post dnia 07.11.09 o godzinie 21:37
unset($this->embeddedForms[$name]['description']);
Aleksander Wikiński student
Temat: i18n - nie moge usunac pol z formularza
A zmienna $name to nazwa formularza czyli 'FirmForm' ?W ogóle może powinienem kod formularza umieszczać w wygenerowanej przez symfony klasie:
class FirmForm extends BaseFirmaForm
{
public function configure()
{
}
}
a nie własnej jak w moim poprzednim poście, tylko że ja chcę stworzyć na jednej stronie formularz do edycji 'email' i 'address', a na drugiej formularz do edycji 'description' ? :/
Adam
W.
www.fotomody.pl
fotografia mody, IT
Temat: i18n - nie moge usunac pol z formularza
Aleksander Wikiński:
A zmienna $name to nazwa formularza czyli 'FirmForm' ?
hmm, tam powinna być nazwa formularza, który dołączasz.
poszperaj w sieci o embed.
a nie własnej jak w moim poprzednim poście, tylko że ja chcę stworzyć na jednej stronie formularz do edycji 'email' i 'address', a na drugiej formularz do edycji 'description' ? :/
możesz stworzyć jakie chcesz i ile chcesz formularzy. w zależności od tego jakie pola są w formularzu rozszerzasz tą klasę o FirmForm czy inną klasę, która została automatycznie utworzona na podstawie modelu.
Aleksander Wikiński student
Temat: i18n - nie moge usunac pol z formularza
Tutaj coś jest:http://groups.google.com/group/symfony-users/browse_th...
I18n fields are not in the form, the in the i18nform.
Example :
CmsPageForm has embed CmsPageI18nForm
So go to your CmsPageI18nForm and unset "title" or "content" field.
ale nie wiem jak to zastosować w praktyce :(
Adam
W.
www.fotomody.pl
fotografia mody, IT
Temat: i18n - nie moge usunac pol z formularza
Aleksander Wikiński:
Tutaj coś jest:
http://groups.google.com/group/symfony-users/browse_th...
I18n fields are not in the form, the in the i18nform.
Example :
CmsPageForm has embed CmsPageI18nForm
So go to your CmsPageI18nForm and unset "title" or "content" field.
ale nie wiem jak to zastosować w praktyce :(
spróbuj
Adam W. edytował(a) ten post dnia 08.11.09 o godzinie 10:06
unset($this->embeddedForms['FirmI18nForm']['description']);
Aleksander Wikiński student
Temat: i18n - nie moge usunac pol z formularza
Niestetyunset($this->embeddedForms['FirmI18nForm']['description']);
ani
unset($this->embeddedForms['FirmTranslationForm']['description']);
nie działają. A jakbym już się poddał i dopuścił możliwość by na jednej stronie były wszystkie formularze to jak wówczas zrobić zapis do bazy ? Formularz wyglądałby wówczas tak:
class ContactForm extends BaseFirmForm
{
public function configure()
{
$this->embedI18n(array('pl', 'en'));
$this->widgetSchema->setLabel('pl', 'Polski');
$this->widgetSchema->setLabel('en', 'Angielski');
}
}
A akcja odpowiadająca za wyświetlanie w formularzu danych z bazy danych do edycji i zapis do bazy zmodyfikowanych danych mam taką:
public function executeEdit_contact(sfWebRequest $request)
{
$firm = Doctrine::getTable('Firm')->find($this->id_firm);
$this->form = new ContactForm($firm);
if ($request->isMethod('post'))
{
$this->form->bind($request->getParameter($this->form->getName()));
if ($this->form->isValid())
{
$this->form->save();
}
}
}
To przy próbie zapisu dostaje błąd, który jak rozumiem wynika z tego, że próbuję do tabeli Firm zapisać dane, które powinny być zapisane do tabeli FirmTranslation, ale to jak mam w takim razie zapisać dane do dwóch tabel ?? :
Validation failed in class FirmTranslation
2 fields had validation errors:
* 1 validator failed on description (notnull)
* 1 validator failed on address (notnull)Aleksander Wikiński edytował(a) ten post dnia 08.11.09 o godzinie 11:36
Łukasz
Feller
programista PHP -
symfony, Grupa
eStorm Internet
Technolo...
Temat: i18n - nie moge usunac pol z formularza
Temat stary, ale może się komuś przydać.Przede wszystkim embeddedForms nie zawierają nazw klas, które dołączamy do formularza, tylko nazwy WŁASNE, pod jakimi to robimy, np.
$this->embedForm('nazwa_wlasna', klasa);
Dlatego do formularzy i18n powinniśmy się odnosić następująco:
$this->embedI18n(array('pl', 'en'));
...
$this->embeddedForms['pl']...
$this->embeddedForms['en']...
Jeśli natomiast chcemy skutecznie wywalić jakieś pole z formularza dołączanego, możemy zastosować taki oto unset:
unset(
$this->embeddedForms['en']['pole'],
$this->widgetSchema['en']['pole'],
$this->validatorSchema['en']['pole']
);
Nadgorliwych odsyłam do funkcji unsetOffset - można tam podejrzeć co jeszcze da się usunąć ;-).
Dlaczego osobno usuwamy widget i validator? Oto jest pytanie - próbowałem usuwać wyłącznie bezpośrednio powiązane pole z embeddedForms, ale mimo to ono nadal się wyświetlało. Prawdopodobnie podczas procedury podpinania podformularzy, robiona jest kopia (clone) naszego obiektu i embeddedForms oraz np. widgetSchema zawierają tak naprawdę 2 niepowiązane fizycznie ze sobą rzeczy. Tyle przynajmniej wywnioskowałem - jeśli się mylę, niech ktoś mnie poprawi.
