@Aop*()
注解,主要作用是实现AOP切面行为注入。
该注解共分为以下
@AopBefore()
:前置注入,会在控制器执行之前触发@AopAfter()
:后置注入,会在控制器执行return
后触发@AopAround()
:前后置注入,相当于@AopBefore()
和@AopAfter()
两种注解的场景都会触发一次@AopThrows()
:异常处理,会在控制器逻辑发生错误异常时触发
场景:当需要前置处理某些业务、后置删除某些缓存、局部监听某些控制器异常时使用。
支持:HTTP
、WebSocket
、Rpc
(2.5.2起)、Mqtt
(2.5.2+)
注解:@AopBefore()
、@AopAfter()
、@AopAround()
、@AopThrows()
参数:
class=""
function=""
class
类对应的方法,该参数为空的时候默认为run
。控制器代码:
<?php
namespace app\http;
use x\controller\Http;
class Index extends Http
{
/**
* 注意:同一类的Aop操作,只会生效一个
* @AopBefore(class="box\aop\Demo", function="before")
* @AopAfter(class="box\aop\Demo", function="after")
* @AopAround(class="box\aop\Demo", function="around")
* @AopThrows(class="box\aop\Demo", function="throws")
*/
public function index() {
return $this->fetch('AOP注入测试');
}
}
box\aop\Demo
代码:
namespace box\aop;
class Demo {
//aop 除了异常通知,其余AOP事件都需要return true程序才会向下执行,否则会抛出异常
//aop 都需要接收以下参数格式
// 前置
public function before() {
return true;
}
// 后置
public function after() {
return true;
}
// 环绕
public function around() {
return true;
}
// 异常通知
public function throws($error) {
}
}
SW-X建议:所有的AOP类都应该统一存放在/box/aop/
目录下,当然这不是强制的。
注意:同一类的Aop操作,只会生效一个。
例如,同时标注两个AopBefore
,只有最后一个会生效。