Home » Zend Framework 2 » Logging im TableGateway

Logging im TableGateway

Wir erstellen einen Listener, welcheswelches als Logger im Hintergrund fungiert. Siehe Quellcode

Und zwar verwenden wir dazu das TabgeGateway. Dieser ruft während der Verarbeitung eine ganze Reihe von Feature-Set Methoden für das FeatureSet auf. postInsert(); preInsert();postUpdate();….
Die Events werden durch das EventFeature ausgelöst.

<?php 
namespace Pizza\Listener; 
use Zend\Db\TableGateway\Feature\EventFeature\TableGatewayEvent; 
use Zend\EventManager\EventInterface; 
use Zend\EventManager\EventManagerInterface; 
use Zend\EventManager\ListenerAggregateInterface; 
use Zend\Log\Logger; 
use Zend\Log\Writer\Stream; 

class LogListener implements ListenerAggregateInterface {     
protected $logger = null;     protected $listeners = array()

    public function __construct($file)     {         $this->logger = new Logger();
        $this->logger->addWriter(new Stream($file));
    }

    public function attach(EventManagerInterface $events)
    {
        $this->listeners[] = $events->attach('postInitialize', array($this, 'logPostInitialize'));
        $this->listeners[] = $events->attach('postInsert', array($this, 'logPostInsert'));
        $this->listeners[] = $events->attach('postDelete', array($this, 'logPostDelete'));
    }

    public function detach(EventManagerInterface $events)
    {
        foreach ($this->listeners as $index => $listener) {
            if ($events->detach($listener)) {
                unset($this->listeners[$index]);
            }
        }
    }

    public function logPostInitialize(TableGatewayEvent $e)
    {
        $this->logger->log(
            Logger::INFO, 
            'TableGateway für Tabelle "' . $e->getTarget()->getTable() 
                . '" initialisiert'
        );
    }

    public function logPostInsert(TableGatewayEvent $e)
    {
        $driver = $e->getTarget()->getAdapter()->getDriver();
        $params = $e->getParam('statement')->getParameterContainer();
        $id     = $driver->getLastGeneratedValue();

        $this->logger->log(
            Logger::INFO, 
            '"' . $params->offsetGet('name') . '" mit ID "' . $id 
                . '" in Tabelle "' . $e->getTarget()->getTable() 
                . '" eingefügt'
        );
    }

    public function logPostDelete(TableGatewayEvent $e)
    {
        $params = $e->getParam('statement')->getParameterContainer();

        $this->logger->log(
            Logger::INFO, 
            'Datensatz mit ID "' . $params->offsetGet('where1') 
                . '" aus Tabelle "' . $e->getTarget()->getTable() 
                . '" gelöscht'
        );
    }
}

Beispiel entnommen aus ZF2 Galileo Computing
Print Friendly

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*
*