Citat:
mitke013:
1. kako zapravo izgleda generisani admin kontroler? Nijedan video snimak nije pokazao da li je to 2 linije ili 200 linija koda
Pogledaj u cash folderu. Ti svaki od tih kontrolera mozes da prosirujes ili menjas u svom modulu ako ti je potrebno.
Citat:
mitke013:
2. klasa za formu; symfony na osnovu opisa modela generise tu klasu. E sad; moji modeli imaju ekstra validaciju gde mi samo opis kolone nije dovoljan. Konkretan primer; klasa Property ima svoju adresu. Nakon validacije polja, pozove se googlemaps da se utvrdi lokacija i tek ako je i to validno, objekat se snima. U protivnom, vraca error. Ovo je samo jedan od primera, ima tu jos jedno 3-4 dodatne validacije samo za klasu Property.
Ti za svoja polja mozes da postavis validatore neovisno o tvom modelu. Mozes da kombinujes vise validatora, dodajes svoje validatore i sve ostalo sto ti je potrebno.
Konkretno gornji primer ako nemas potrebu za pravljenjem novog validatora brzu dodatnu validaciju mozes mozes da uradis ovako
Code:
// lib/form/xxxForm.class.php
public function configure()
{
// set widget, validators ...
// ...
$this->mergePostValidator(
new sfValidatorCallback(array('callback' => array($this, 'postChecks')))
);
}
public function postChecks($validator, $values)
{
$errors = array();
if ( !empty($values['username']) )
{
//check some data
// ...
$errors['email'] = new sfValidatorError($validator, 'Some custom error');
$errors['link'] = new sfValidatorError($validator, 'Some custom error2');
}
if ( count($errors) > 0)
{
throw new sfValidatorErrorSchema($validator, $errors);
}
return $values;
}
Citat:
mitke013:
3. klasa za formu; koliko zapravo ja imam kontrolu kako ce taj rezultat da izgleda? Primer: imam template koji mi se MNOGO svidja. Da li mogu naterati tu klasu da generise HTML prema tom templatu? Znaci da ne moram rucno da je menjam, ne zelim to da radim svaki put kad promenim relacije u bazi (radim samo velike programe)
Kustomizaciju forme radis u fajlu xxxForm.class.php a prilikom generisanja formi menja se fajl u base folderu BasexxxForm.class.php . Na taj nacin zadrzavas prethodne izmene nakon promene modela i ponovnog generisanja formi.
Ako si mislio na pojedinacni prikaz polja dodajes potrebne atribute u widgets u samoj form klasi
Code:
'username' => new sfWidgetFormInput(array('class' => 'foo'))
ili u view delu
Code:
echo $form['username']->renderRow(array('class' => 'foo', 'size' => 30))
Ako hoces mozes da pretocis odredjeni prikaz formi u template pomocu
sfWidgetFormSchemaFormatter klase
Citat:
mitke013:
4. kad model u pre/post Validate metodi uradi neku dodatnu validaciju (kao gornji primer za googlemaps), ja u toj metodi uradim $this->getErrorStack()->add('bad_address', '...') i posle to mogu da ispisem u view da adresa nije nadjena ovim:
Code:
if ( !$property->isValidField('bad_address') )
echo 'Adresa nije nadjena' ;
Kako se to radi u Symfony FW-u? Da li opis greske moze da ostane u view delu, tj. da se ne definise u modelu (duga prica zasto)?
Ti mozes da napravis custom funkciju u form klasi pa da je pozoves iz viewa sa $form->myCustom() ali nema svrhe za tim kad ti form klasa odradjuje sve sto ti treba. U mom gornjem primeru validacije automatski se dodaje error poljima 'email' i 'link' i ispisuje u viewu.