Ál symfony könyv forms fejezet

François Zaninotto. Akinek a név nem mond semmit (nem feltétlenül kell, hogy mondjon🙂 ), ő az, aki a symfony 1.0 könyvet írta (Fabiennel karöltve), majd kilépett a symfony core teamből, ugyancsak Fabien miatt (nem egyeztek). A jóember saját blogot is vezet. Saját magát nem nevezi fejlesztőnek (hogy micsoda azt nem árulja el), amit mostanában művel az pedig… hm… erről szól ez a poszt.

Szóval ez a jóember legutóbbi bejegyzésében megírta a forms fejezetet a symfony könyvhöz sfForm alapokon, ahogy ő gondolja / szeretné látni. Korábban már többször szapulta a jelenlegi sfForm dokumentációt, meg még sok minden mást is, ami nem symfony 1.0 (nyilván fáj neki, hogy az 1.1 már nem nevezhető az ő gyermekének is).

Aki eddig nem jött volna még rá, arról fogok írni, miért teljesen elhibázott a felfogása.

Nos, ez valójában egy (majdnem) teljes mértékben álfejezet, egy fantazmagória. Nézzük egyből az első példakódját.

  $this->form->setWidgets(array(
    'name'    => 'text',
    'email'   => array('type' => 'text', 'default' => 'me@example.com'),
    'subject' => array('type' => 'choice', 'choices' => array('Subject A', 'Subject B', 'Subject C')),
    'message' => 'textarea'
  ));

Mi ebben a hibás? Számomra pusztán annyi, hogy egyáltalán nem IDE-friendly. Bárki, aki nem notepadben szerkeszti a kódját csak veszít ezzel a jelölésmóddal, az IDE számára nem jelent semmit, ráadásul nekem is memorizálnom kéne a típusokat. De minek? Azt érzem, hogy valahogy vissza akarja tuszkolni az 1.0 generátor yaml-jeiben használt szintaxist, miközben egy szépen megtervezett apit kaptunk a sfForm, sfWidget, sfValidatorBase osztályokkal.

Nézzük a következőt:

public function executeContact($request)
{
  $this->form = new sfForm();
  $this->form->setWidgets(array(
    'name'    => 'text',
    'email'   => array('type' => 'text', 'default' => 'me@example.com'),
    'subject' => array('type' => 'choice', 'choices' => array('Subject A', 'Subject B', 'Subject C')),
    'message' => 'textarea'
  ));
}

Briliáns gondolat, csak a formokban pont az a jó, hogy egységbe zárhatod a widgeteket és a validatorokat (meg még jó pár dolgot). Így ebben a formában történő használatát nem javasolnám senkinek (arról nem is beszélve, hogy az sfFormban minden widgethez kötelező validatort is megadni, ami itt valahogy kimaradt).

A következő:

$this->form = new sfForm();
$this->form->setWidgets(array(
  'name'    => array('type' => 'text', 'label' => 'Your Name', 'attributes' => array('size' => 25, 'class' => 'foo')),
  'email'   => array('type' => 'text', 'default' => 'me@example.com', 'label' => 'Your Email', 'attributes' => array('onclick' => 'this.value = "";')),
  'subject' => array('type' => 'select', 'choices' => array('Subject A', 'Subject B', 'Subject C'), 'attributes' => 'id=contact_subject class=bar'),
  'message' => array('type' => 'textarea', 'attributes' => 'size=20x5')),
));

Az sfForm API-ban gyönyörűen különválnak a widget opciók és attribútumok. Attribútumot pont úgy kell megadni, mintha azt a html tagban tennének, csak asszociatív tömb formában. Külön kell megadni a cimkéket és az alapértelmezett értéket (ami teljesen logikus). Ehhez képes itt aztán minden össze van kuszálva. Nem tudom, hogy kinek jó ez, nekem biztos nem.

A validatorok elég későn kerülnek tárgyalásra, inkább csak átfut rajtuk, nem hangsúlyozza ki az igazi újdonságot, vagyis a validator szerepe nem csak az adat érvényesítése, hanem annak tisztítása, adott esetben átalakítása is.

// Boolean validator
$form->setValidator('has_signed_terms_of_service', array('type' => 'boolean'));

// Choice validator (to restrict values in a list)
$form->setValidator('subject', array(
  'type'    => 'choice',
  'choices' => array('Subject A', 'Subject B', 'Subject C')
));

// Multiple choice validator
$form->setValidator('languages', array(
  'type'    => 'choice_many',
  'choices' => array('en' => 'English', 'fr' => 'French', 'other')
));

Itt a choises mit is validál? A kulcsot? Vagy az értéket? Nem értem.

Ezután pár bekezdés erejéig kedvenc elmebajával foglalkozik (nem csak itt mániája ez): generáljunk formokat yaml fileok alapján. Hát ezt meg minek? IDE sincs hozzá (kód kiegészítés), ráadásul szvsz tovább tart megírni, mit magát az osztályt. Ergo nem látom mint nyernék vele.

Ha tényleg szeretnél elmélyedni az sfForm-ok használatában, inkább olvasd el a symfony forms book-ot, akár magyarul is.

Ennyit a formokról.

Ha érdekelnek még hasonlóan “vicces” dolgai, nézd meg a DbFinderPlugin-ját (egykor sfPropelFinderPlugin). Ez valami szánalmas, de nem a teljesítménye vagy apija miatt, hanem mert ez az absztrakció absztrakciójának absztrakciója.

Szóval ha elvetődsz az oldalára erős fenntartással olvasd az írásait. Saját bevallása szerint nem fejlesztő, ami az általa kitalált apik alapján látszik is.

Kategória: dokumentáció, gondolatok, symfony
Címke: , ,
Közvetlen link a könyvjelzőhöz.

2 hozzászólás a(z) Ál symfony könyv forms fejezet bejegyzéshez

  1. szörnyeteg szerint:

    helló!

    kötekedés:

    “arról nem is beszélve, hogy az sfFormban minden widgethez kötelező validatort is megadni, ami itt valahogy kimaradt”

    Ez szemléletbeli dolog, mert a Symfony csak “szeretné”, hogy így legyen, de semmivel nem ösztönöz ennek a betartására, talán kötelezővé kéne ezt tenni, mert tényleg hasznos, bár néha tényleg feleslegesnek tűnik.

    🙂

  2. Sulik Szabolcs szerint:

    Mondtam én, hogy ez nem kommunizmus, inkább átgondoltság🙂

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