Mi várható a Symfony 1.1-ben – 2. rész

A symfony 1.1 gyakorlatilag készen áll, lássuk milyen változások/újdonságok várható az új kiadásban.

A leí­rás Fabien Potencier, International PHP 2007 Conference előadásának fóliái alapján készült.

Az osztályok közötti függőségekről, Event Dispatcher.

Alap osztályok közötti függőségek változása

A rendszer belső működése nagyobb ráncfelvarráson esett át. Lecsökkentették a singletonok számát (az sfContext maradt az egyetlen), valamint megszüntették a többszörös függőségetek. Az alábbi két képen szemléletesek a változások.

whats_new_in_symfony_11_img1

whats_new_in_symfony_11_img2

A középpontban ezentúl az sfEventDispatcher osztály áll, mely a Cocoa Notification Center-en alapul. Itt lehet tetszőleges eseményekhez azokra reagáló függvényeket beregisztrálni, valamint ezen keresztül lehet a beregisztrált függvényeket értesí­teni megfelelő esemény kiváltásával. Ez í­gy egy kicsit bonyolultan hangzik, láttunk néhány példát.

1. példa: hogyan változott a logolás. Ehhez szerepeljenek itt az sfActions::execute()-ban található kódok.

// 1.0 alatt
if (sfConfig::get('sf_logging_enabled'))
{
  $this->getContext()->getLogger()->info(
    '{sfAction} call "'.get_class($this).'->'.$actionToRun.'()'.'"'
  );
}

Ha a loggolás aktí­v, akkor beszerzi a loggert és felveszi a paraméterben látható üzenetet.

// 1.1 alatt
if (sfConfig::get('sf_logging_enabled'))
{
  $this->dispatcher->notify(
    new sfEvent(
      $this,
      'application.log',
      array(sprintf('Call "%s->%s()"', get_class($this), $actionToRun))
    )
  );
}

Ha a loggolás aktí­v, akkor értesí­ti a dispatchert, hogy egy application.log nevű esemény következik, melynek kiváltója $this (ebben az esetben a megfelelő sfActions leszármazott), az üzenet pedig a harmadik paraméterben átadott tömb. Az üzenet azért tömb, mert í­gy több is lehet.

Hogy miért jó ez? Mert í­gy nem csak egy, ‘beégetett’ kódrészlet reagálhat az loggolással kiváltott eseményre, hanem tetszőleges számú. A következő példa ennek lehetőségét mutatja be.

// saját eseménykezelő függvény config/config.php alatt
function my_event(sfEvent $event) {
  $content = "";
  $file    = sfConfig::get('sf_data_dir').'/my_event.log';
  if (is_file($file)) {
    $content = file_get_contents($file);
  }
  foreach ($event->getParameterHolder()->getAll() as $message) {
    $content .= sprintf("%srn", $message);
  }
  file_put_contents($file, $content);
}

// eseménykezelő regisztrálása web/valami_dev.php alatt
$dispatcher = sfContext::getInstance()->getEventDispatcher();
$dispatcher->connect('application.log', 'my_event');

Maga az eseménykezelő nagyon egyszerű: a projekt könyvtár alatt a data/my_event.log fileba í­rja a beérkező üzeneteket.

Végszó

Továbbra sincs még vége🙂. átnéztük az osztályfüggőségek változásait, valamint példákon keresztül az Event Dispatcher működését. A következő részben az új Form és Validation keretrendszerről lesz szó.

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

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