@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,只有最后一个会生效。
SW-X