Admin generator, sfForm tippek

Az utóbbi időben volt szerencsém jónéhány admin felületet készíteni. Természetesen rengeteg tapasztalat jött össze. Ebből próbálok pontokba szedve összegyűjteni néhányat (régi dolgokat és újonnan összeszedetteket), hátha másnak is segít (vagy majd más is segít nekem😉 ).

1. Az admin generator nagyon hatékony eszköz (alig várom az 1.2-ben az sfForm alapút), különösen ha listázásra, szűrésre, pagerre vagy egyszerű rendezésre van szükség.

A listázást talán nem kell magyarázni, a partial használata rendkívül rugalmas eszközt biztosít (komponens alapú mező helyettesítésre eddig még egyáltalán nem volt szükségem). Ehhez barátunk lehet a peer_method opció: ezzel lehet inicializálni a pager Criteria (propel) / Doctrine_Query objektumát. Az itt megadott metódust mindig a Peer / Table osztályban kell definiálni, példány metódusként (tehát nem statikus). Itt lehet előre összeállítani egy lekérdezést (join-ok, miegymás), ami független a filter vagy sort beállítástól.

Szűrés / rendezés esetén az addFiltersCriteria() / addSortCriteria() protected metódusokat használhatjuk. Ezek mindig egy paramétert kapnak: Criteria / Doctrine_Query. A filter és a rendező inicializálását a processFilter() / processSort() végzi, nagyon ritkán jól jön, ha ezekkel is eljátszunk.

2. Szerkesztés esetén érdemes befektetni a modelhez generált form sfFormPropel / sfFormDoctrine alapú osztályokba.

Személy szerint nem igen hiszek formok esetében a base osztályok létjogosultságában. Mindig a base osztályt másoltam le máshova és írtam át. Ne tévesszen meg senkit a jól hangzó “ha sémát váltasz, akkor csak a base osztályt kell újra elkészíteni” szöveg. Ez igaz is lehetne, csakhogy tapasztalat szerint a sémából elkészült widget séma és validator séma 50-70%-át át kell írni. Egész egyszerűen senki sem tudja kitalálni a mező típusából, hogy mit is akarsz valójában abban tárolni (validator), azt meg pláne nem, hogy hogyan akarod megjeleníteni (widget). A labeleket mindenképpen kézzel veszed fel, így ennek a base osztályos dolognak nem sok értelmét látom.

Bár kissé lassúnak tűnhet elsőre az űrlapok elkészítése (admin generatorral ellentétben), viszont ha egy kicsit is komolyabb validálás kell, vagy trükközni kell az adatokkal, akkor az sfForm nyújtotta rugalmasság messze visszahozza a ráfordított időt.

3. Ha már formok, akkor lássuk, ami a forms bookból (eddig) kimaradt: a csrf védelem automatikusan aktív. Hacsak nem tudsz minden esetben echo $form -ot használni, akkor vagy kapcsold ki:

class XYForm extends sfForm
{
  function setup()
  {
    sfForm::disableCSRFProtection();
  }
}

vagy a templateben jelenítsd meg a csrf token tárolására szolgáló hidden mezőt:


...

Néhány ősz hajszáltól így megkíméled magad.

Azt még tudni kell, hogy a jelenlegi megvalósításban csak az összes formra lehet a fenti módszerre kikapcsolni a token. Tehát ha több formod van az oldalon és abból valahol szükséged van rá, akkor ne kapcsold ki globálisan, csak ott ahol nincs rá szükség: a konstruktor harmadik paraméterének FALSE értékével érheted ezt el.

4. A forms bookban szerepel, de nem árt tudatosítani: az sfForm validatorai két feladatot látnak el – érvényesítik az adatokat, valamint tisztítják, egységesítik azokat. Ez akkor jön ki nagyon élesen, ha egy sfValidatorFile-lal érvényesített mezőtől kérjük el az értékét. Az ugyanis egy sfValidatedFile objektum. Forms book 2 fejezet.

5. Az sfFormPropel / sfFormDoctrine páros létrehozáskor első paraméterként egy rekord példányt vár. Mi sem egyszerűbb ennél az admin generátor mellett:

...
$this->form = new MyModelForm($this->getMyModelOrCreate());
...

Így hirtelen ennyi.

Kategória: php, symfony, trükkök
Címke: , , ,
Közvetlen link a könyvjelzőhöz.

2 hozzászólás a(z) Admin generator, sfForm tippek bejegyzéshez

  1. szörnyeteg szerint:

    Már rég írtál bejegyzést!!! Biztosan nyaralsz valahol, remélem tetszik a tengerpart!

  2. Sulik Szabolcs szerint:

    🙂 mondjam vagy mutassam.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s