AOP 拦截请求
优质
小牛编辑
142浏览
2023-12-01
在 imi 中更加推荐使用 AOP 来拦截请求。
不要忘记把
Aspect
类加入beanScan
!
Demo
<?php
namespace ImiApp\ApiServer\Aop;
use Imi\RequestContext;
use Imi\Aop\Annotation\Around;
use Imi\Aop\Annotation\Aspect;
use Imi\Aop\Annotation\PointCut;
use Imi\Aop\AroundJoinPoint;
use Imi\Util\Http\Consts\MediaType;
use Imi\Util\Http\Consts\ResponseHeader;
/**
* 拦截控制器动作请求 Demo
*
* @Aspect
*/
class Fuck
{
/**
* 直接获取 Response 对象,强行输出
*
* @PointCut(
* allow={
* "ImiApp\ApiServer\Controller\IndexController::fuck1",
* }
* )
* @Around
*
* @return void
*/
public function fuck1(AroundJoinPoint $joinPoint)
{
/** @var \Imi\Server\Http\Message\Response $response */
$response = RequestContext::get('response');
$response->withHeader(ResponseHeader::CONTENT_TYPE, MediaType::APPLICATION_JSON_UTF8)
->write(json_encode([
'result' => 'fuck1',
]))
->send();
// 如果需要执行原动作方法,可以去掉注释
// $returnValue = $joinPoint->proceed();
// return $returnValue; // 返回原返回值
}
/**
* 强行修改返回值
*
* @PointCut(
* allow={
* "ImiApp\ApiServer\Controller\IndexController::fuck2",
* }
* )
* @Around
*
* @return void
*/
public function fuck2(AroundJoinPoint $joinPoint)
{
// 如果需要执行原动作方法,可以去掉注释
// $returnValue = $joinPoint->proceed();
// return $returnValue; // 返回原返回值
// 强行修改返回值
return [
'result' => 'fuck2',
];
}
}