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
email

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.

Adam W. senior php
developer, Symfony

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:

unset($this->embeddedForms[$name]['description']);
Adam W. edytował(a) ten post dnia 07.11.09 o godzinie 21:37

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.

Adam W. senior php
developer, Symfony

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.

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.

Adam W. senior php
developer, Symfony

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

unset($this->embeddedForms['FirmI18nForm']['description']);
Adam W. edytował(a) ten post dnia 08.11.09 o godzinie 10:06

Temat: i18n - nie moge usunac pol z formularza

Niestety
unset($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

konto usunięte

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.

Następna dyskusja:

upload pliku - lokalnie dzi...




Wyślij zaproszenie do