Symfony2 でアスペクトを作成しようとしていますが、http://jmsyst.com/bundles/JMSAopBundleの指示に従いましたが、何が問題なのかわかりません。これは私のservices.ymlです:
exception_pointcut:
class: AGF\Services\Aspects\Exceptions\ExceptionPointcut
tags:
- { name: jms_aop.pointcut, interceptor: exception_interceptor }
exception_interceptor:
class: AGF\Services\Aspects\Exceptions\ExceptionInterceptor
arguments: [@security.context, @logger]
これは私の「ポイントカット」です:
<?php
namespace AGF\Services\Aspects\Exceptions;
use JMS\AopBundle\Aop\PointcutInterface;
class ExceptionPointcut implements PointcutInterface
{
public function matchesClass(\ReflectionClass $class)
{
return true;
}
public function matchesMethod(\ReflectionMethod $method)
{
if($method->name == '__construct')
{
return false;
}
}
}
これは私のインターセプターです:
<?php
namespace AGF\Services\Aspects\Exceptions;
use CG\Proxy\MethodInterceptorInterface;
use CG\Proxy\MethodInvocation;
use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\Security\Core\SecurityContextInterface;
class ExceptionInterceptor implements MethodInterceptorInterface
{
private $context;
private $logger;
public function __construct(SecurityContextInterface $context, LoggerInterface $logger)
{
$this->context = $context;
$this->logger = $logger;
$this->logger->debug('HOLA2');
}
public function intercept(MethodInvocation $invocation)
{
try {
return $invocation->proceed();
}
catch (\Exception $e)
{
$this->logger->err($e);
}
}
}
すべてのクラスがポイントカットに到達しますが、インターセプターには到達しません。ポイントカット (echo $method->name) で「エコー」を行うと、ポイントカットは機能しますが、インターセプターでデバッグを行うと、ログに何も表示されません。