2017 © Pedro Peláez
 

library mplog

A Doctrine2 behavior based on Gedmo extensions

image

malapronta/mplog

A Doctrine2 behavior based on Gedmo extensions

  • Friday, September 12, 2014
  • by malapronta
  • Repository
  • 14 Watchers
  • 0 Stars
  • 687 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

Malapronta Logger behavior

Latest Stable Version Total Downloads, (*1)

Overview

This is a Doctrine2 behavior extension, based on Gedmo, (*2)

Install

Add MPLog in your composer.json:, (*3)

{
    "require": {
        "malapronta/mplog": "dev-master"
    }
}

Using

1) Configure your doctrine extensions file, (*4)

``` yaml, (*5)

app/config/doctrine_extensions.yml

services: malapronta.listener.eventpersist: class: Ota\ServiceBundle\Listener\EventPersistListener tags: - { name: doctrine.event_listener, event: preUpdate } - { name: doctrine.event_listener, event: postFlush }, (*6)

# KernelRequest listener
extension.listener:
    class: Ota\ServiceBundle\Listener\DoctrineExtensionListener
    calls:
        - [ setContainer, [ @service_container ] ]
    tags:
        # loggable hooks user username if one is in security context
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

# Doctrine Extension listeners to handle behaviors
malapronta.listener.mplog:
    class: Malapronta\MpLog\MpLoggerListener
    tags:
        - { name: doctrine.event_subscriber, connection: default }
    calls:
        - [ setAnnotationReader, [ @annotation_reader ] ]

And import in your config.yml file ``` yaml imports: - { resource: doctrine_extensions.yml }

2) Configure your Listener class, (*7)


<?php // src/Your/NameBundle/Listener/DoctrineExtensionListener.php namespace Your\NameBundle\Listener; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerInterface; class DoctrineExtensionListener implements ContainerAwareInterface { /** * @var ContainerInterface */ protected $container; public function setContainer(ContainerInterface $container = null) { $this->container = $container; } public function onKernelRequest(GetResponseEvent $event) { $securityContext = $this->container->get('security.context', ContainerInterface::NULL_ON_INVALID_REFERENCE); if(null !== $securityContext && null !== $securityContext->getToken() && $securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) { $loggable = $this->container->get('malapronta.listener.mplog'); $loggable->setUpdatedByUser($securityContext->getToken()->getUser()->getId()); $loggable->setUpdatedByIp($this->getRemoteAddr()); $loggable->setUpdatedByType('TYPE_NAME'); } } private function getRemoteAddr() { return isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : ''; } }

3) Configure your Entity class, (*8)


<?php // src/Your/NameBundle/Entity/Foo.php namespace Your\NameBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Malapronta\Mapping\Annotation as Malapronta; /** * @ORM\Entity * @ORM\Table(name="foo") * @Malapronta\MpLogger */ class Foo { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(name="updated_by_user", type="integer") */ private $updatedByUser; /** * @ORM\Column(name="updated_by_ip", type="string", length=39) */ private $updatedByIp; /** * @ORM\Column(name="updated_by_type", type="string", length=255) */ private $updatedByType; // implement get and set methods }

4) Configure your Event Persist Listener, (*9)

<?php

// src/Your/NameBundle/Entity/Foo.php

namespace Your\NameBundle\Entity;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PostFlushEventArgs;

use Ota\ServiceBundle\Entity\InquiryHistory;
use Ota\ServiceBundle\Entity\InquiryHospitality;

/**
 * EventPersistListener class implements doctrine events
 *
 * @package Ota\ServiceBundle\Listener
 * @since   2013-10-03
 */
class EventPersistListener
{
    private $needsFlush;

    /**
     * preUpdate hook
     */
    public function preUpdate(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        $entityManager = $args->getEntityManager();
        $fields = array();

        if ($entity instanceof Foo) {
            // do some magic stuff
        }
    }

    /**
     * postFlush hook
     */
    public function postFlush(PostFlushEventArgs $eventArgs)
    {
        if ($this->needsFlush) {
            $this->needsFlush = false;
            $eventArgs->getEntityManager()->flush();
        }
    }
}

The Versions

12/09 2014

dev-master

9999999-dev http://www.malapronta.com.br

A Doctrine2 behavior based on Gedmo extensions

  Sources   Download

MIT

The Requires

 

by Marcos Vinicius Joia Lazarin

symfony doctrine2 malapronta

07/03 2014

v1.0.0

1.0.0.0 http://www.malapronta.com.br

A Doctrine2 behavior based on Gedmo extensions

  Sources   Download

MIT

The Requires

 

by Marcos Vinicius Joia Lazarin

symfony doctrine2 malapronta