/** * Reads the @Request and @Response annotations. * * @param ConfigureRouteEvent $event */ public function onConfigureRoute(ConfigureRouteEvent $event) { foreach (['_request' => 'Request', '_response' => 'Response'] as $name => $class) { if ($annotation = $this->getAnnotation($event->getMethod(), $class)) { if ($data = $annotation->getData()) { $event->getRoute()->setDefault($name, $data); } } } }
/** * Reads the "@Access" annotations from the controller stores them in the "access" route option. * * @param ConfigureRouteEvent $event */ public function onConfigureRoute(ConfigureRouteEvent $event) { if (!$this->reader) { $this->reader = new SimpleAnnotationReader(); $this->reader->addNamespace('Pagekit\\User\\Annotation'); } $admin = false; $access = []; foreach ($this->reader->getClassAnnotations($event->getClass()) as $annot) { if ($annot instanceof Access) { if ($expression = $annot->getExpression()) { $access[] = $expression; } if ($annot->getAdmin()) { $admin = true; } } } foreach ($this->reader->getMethodAnnotations($event->getMethod()) as $annot) { if ($annot instanceof Access) { if ($expression = $annot->getExpression()) { $access[] = $expression; } if ($annot->getAdmin()) { $admin = true; } } } $route = $event->getRoute(); if ($admin) { $route->setPath(rtrim('admin' . $route->getPath(), '/')); $access[] = 'system: access admin area'; } if ($access) { $route->setDefault('_access', array_unique($access)); } }