sibset/aop-feature-bundle

AOP features for Symfony 2

Installs: 16

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 2

Forks: 0

Open Issues: 0

Type:symfony-bundle

v1.0.0-beta.1 2013-10-07 08:09 UTC

This package is not auto-updated.

Last update: 2024-03-11 12:58:31 UTC


README

Build Status Scrutinizer Quality Score

Расширение Symfony Framework для аспектно-ориентированного программирования. Добавляет возможность указвывать аспекты для методов, уменьшая количество сквозного кода в приложении.

Аспекты

Расширение поставляет ряд готовых аспектов.

Logging

Аспект для логирования вызова метода.

<?php

use SibSet\Bundle\AopFeatureBundle\Annotation as Aspect;

/**
 * @Aspect\Logging("log.message.writer.user.create")
 */
public function createUser(User $user)
{
    // ...
}

В аннотации требуется указать идентификатор сервиса в контейнере зависмостей. Сервис должен быть наследником класса SibSet\Bundle\AopFeatureBundle\Aspect\Logging\AbstractWriter

Transaction

Ипользование транзакции для метода

<?php

use SibSet\Bundle\AopFeatureBundle\Annotation as Aspect;

/**
 * @Aspect\Transactional
 */
public function createUser(User $user)
{
    $this->getManager()->persist($user);
    $this->getManager()->flush($user);
}

Вызов метода будет обернут в try...catch блок с вызовом commit() в try и rollback() в catch

SuppressException

Подавление исключений в методе, полезно использовать в связке с Logging

<?php

use SibSet\Bundle\AopFeatureBundle\Annotation as Aspect;

/**
 * @Aspect\SuppressException
 */
public function createUser(User $user)
{
    throw new \Exception("All is dust!");
}

Возможно указать конкретный тип перехватываемого исключения

/**
 * @Aspect\SuppressException("\RuntimeException")
 */
public function createUser(User $user)

Установка

Composer

Добавте зависимости в проектный файл composer.json

"require": {
    # ..
    "sibset/aop-feature-bundle": ">=1.0.0"
    # ..
}

AppKernel.php

<?php
public function registerBundles()
{
    $bundles = array(
        // ...
        new JMS\AopBundle\JMSAopBundle(),
        new SibSet\Bundle\SibSetAopBundle(),
    );

    // ...

    return $bundles;
}