大佬教程收集整理的这篇文章主要介绍了php – symfony 3控制器中的自定义注释,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
if (!$request->getContentType() === 'json' ) { return new JsonResponse(array('success' => falsE)); } $content = $request->getContent(); if(empty($content)){ throw new BadrequesthttpException("Content is empty"); } $data = json_decode($content,truE); if(empty($data) || !array_key_exists('type',$data)) { return new JsonResponse(array('success' => falsE)); }
注解
/** * @Annotation */ class checkrequest { }
服务定义
services: controller_check_request: class: AppBundle\EventListener\ControllercheckrequestListener tags: - { name: kernel.event_listener,event: kernel.controller,method: onKernelController} arguments: - "@Annotation_reader"
监听器:
namespace AppBundle\EventListener; use AppBundle\Annotation\checkrequest; use Doctrine\Common\Annotations\Reader; use Symfony\Component\httpFoundation\JsonResponse; use Symfony\Component\httpKernel\Event\FilterControllerEvent; use Symfony\Component\httpKernel\Exception\BadrequesthttpException; class ControllercheckrequestListener { /** @var Reader */ private $reader; /** * @param Reader $reader */ public function __construct(Reader $reader) { $this->reader = $reader; } /** * {@inheritdoc} */ public function onKernelController(FilterControllerEvent $event) { if (!is_array($controllers = $event->getController())) { return; } $request = $event->getrequest(); $content = $request->getContent(); list($controller,$methodName) = $controllers; $reflectionClass = new \ReflectionClass($controller); $classAnnotation = $this->reader ->getClassAnnotation($reflectionClass,checkrequest::class); $reflectionObject = new \ReflectionObject($controller); $reflectionMethod = $reflectionObject->getMethod($methodName); $methodAnnotation = $this->reader ->getMethodAnnotation($reflectionMethod,checkrequest::class); if (!($classAnnotation || $methodAnnotation)) { return; } if ($request->getContentType() !== 'json' ) { return $event->setController( function() { return new JsonResponse(['success' => false]); } ); } if (empty($content)) { throw new BadrequesthttpException('Content is empty'); } $data = json_decode($content,truE); if ($request->getContentType() !== 'json' ) { return $event->setController( function() { return new JsonResponse(['success' => false]); } ); } } }
请注意,不是返回响应,而是使用$event-> setController();设置整个控制器,并且在进行该调用时也必须返回.
然后在您的控制器中,您可以在整个类中设置它:
use AppBundle\Annotation\checkrequest; /** * @checkrequest */ class YourController extends Controller { }
或个别方法/行动:
use AppBundle\Annotation\checkrequest; class TESTController extends Controller { /** * @Route("/",name="index") * @checkrequest */ public function indexAction(request $request) { // ... } }
以上是大佬教程为你收集整理的php – symfony 3控制器中的自定义注释全部内容,希望文章能够帮你解决php – symfony 3控制器中的自定义注释所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。