You can call getController() to retrieve the current controller. With
setController() you can set a new controller that is used in the processing
of the request.
Controllers should be callables.
/** * Modifies the Request object to apply configuration information found in * controllers annotations like the template to render or HTTP caching * configuration. * * @param FilterControllerEvent $event A FilterControllerEvent instance */ public function onKernelController(FilterControllerEvent $event) { if (!is_array($controller = $event->getController())) { return; } $className = class_exists('Doctrine\\Common\\Util\\ClassUtils') ? ClassUtils::getClass($controller[0]) : get_class($controller[0]); $object = new \ReflectionClass($className); $method = $object->getMethod($controller[1]); $classConfigurations = $this->getConfigurations($this->reader->getClassAnnotations($object)); $methodConfigurations = $this->getConfigurations($this->reader->getMethodAnnotations($method)); $configurations = array(); foreach (array_merge(array_keys($classConfigurations), array_keys($methodConfigurations)) as $key) { if (!array_key_exists($key, $classConfigurations)) { $configurations[$key] = $methodConfigurations[$key]; } elseif (!array_key_exists($key, $methodConfigurations)) { $configurations[$key] = $classConfigurations[$key]; } else { if (is_array($classConfigurations[$key])) { if (!is_array($methodConfigurations[$key])) { throw new \UnexpectedValueException('Configurations should both be an array or both not be an array'); } $configurations[$key] = array_merge($classConfigurations[$key], $methodConfigurations[$key]); } else { // method configuration overrides class configuration $configurations[$key] = $methodConfigurations[$key]; } } } $request = $event->getRequest(); foreach ($configurations as $key => $attributes) { $request->attributes->set($key, $attributes); } }
public function onKernelController(FilterControllerEvent $event) { // admin menu will be rendered only when HttpKernelInterface::MASTER_REQUEST if ($event->getRequestType() == HttpKernelInterface::SUB_REQUEST) { return; } if (!$this->container->get('session')->has('admin/menu')) { $builder = new AdminMenuBuilder(); $builder->add(new AdminMenuItem(['id' => 'dashboard', 'class' => 'dashboard', 'name' => $this->translator->trans('Dashboard'), 'path' => '[menu][dashboard]', 'sort_order' => 10])); $builder->add(new AdminMenuItem(['id' => 'catalog', 'class' => 'catalog', 'name' => $this->translator->trans('Catalog'), 'path' => '[menu][catalog]', 'sort_order' => 20])); $builder->add(new AdminMenuItem(['id' => 'promotions', 'class' => 'promotions', 'name' => $this->translator->trans('Promotions'), 'path' => '[menu][promotions]', 'sort_order' => 30])); $builder->add(new AdminMenuItem(['id' => 'sales', 'class' => 'sales', 'name' => $this->translator->trans('Sales'), 'path' => '[menu][sales]', 'sort_order' => 40])); $builder->add(new AdminMenuItem(['id' => 'reports', 'class' => 'reports', 'name' => $this->translator->trans('Reports'), 'path' => '[menu][reports]', 'sort_order' => 50])); $builder->add(new AdminMenuItem(['id' => 'crm', 'class' => 'crm', 'name' => $this->translator->trans('CRM'), 'link' => '', 'path' => '[menu][crm]', 'sort_order' => 60])); $builder->add(new AdminMenuItem(['id' => 'cms', 'class' => 'cms', 'name' => $this->translator->trans('CMS'), 'path' => '[menu][cms]', 'sort_order' => 70])); $builder->add(new AdminMenuItem(['id' => 'layout', 'class' => 'layout', 'name' => $this->translator->trans('Layout settings'), 'path' => '[menu][layout]', 'sort_order' => 80])); $builder->add(new AdminMenuItem(['id' => 'integration', 'class' => 'integration', 'name' => $this->translator->trans('Integration'), 'path' => '[menu][integration]', 'sort_order' => 90])); $builder->add(new AdminMenuItem(['id' => 'configuration', 'class' => 'configuration', 'name' => $this->translator->trans('Configuration'), 'link' => '', 'path' => '[menu][configuration]', 'sort_order' => 100])); $builder->add(new AdminMenuItem(['id' => 'localization', 'class' => 'localization', 'name' => $this->translator->trans('Localization'), 'path' => '[menu][configuration][localization]', 'sort_order' => 10])); $builder->add(new AdminMenuItem(['id' => 'store_management', 'class' => 'store_management', 'name' => $this->translator->trans('Store management'), 'path' => '[menu][configuration][store_management]', 'sort_order' => 20])); $builder->add(new AdminMenuItem(['id' => 'user_management', 'name' => $this->translator->trans('User management'), 'path' => '[menu][configuration][user_management]', 'sort_order' => 30])); $adminMenuEvent = new AdminMenuInitEvent($builder); $event->getDispatcher()->dispatch(AdminMenuInitEvent::ADMIN_MENU_INIT_EVENT, $adminMenuEvent); $menu = $adminMenuEvent->getBuilder()->getMenu(); $this->container->get('session')->set('admin/menu', $menu); } }
public function onKernelController(FilterControllerEvent $event) { $locale = null; $default_locale = null; $part_locale = Service::get('config')->get('app', 'local', null); if ($part_locale) { $part_locale = explode('_', $part_locale); $default_locale = $part_locale[0]; } $Request = $event->getRequest(); // Si en la sesion no existe _locale pregunta a la ruta encontrada si existe la opcion _locale if (!Service::get('session')->has('_locale')) { /** @var RouteCollection $RouteCollection */ $RouteCollection = Service::get('kernel.routes'); /** @var Route $Route */ $Route = $RouteCollection->get($Request->attributes->get('_route')); $locale = $Route->getOption('_locale'); // Si no la encuentra la optiene de la configuracion. if (!$locale) { $locale = $default_locale; } // Si no existe en la configuracion la obtiene de la peticion por defecto del componente. if (!$locale) { $locale = $Request->getDefaultLocale(); $default_locale = $Request->getDefaultLocale(); } // Asigna a la sesion la variable locale. Service::get('session')->set('_locale', $locale); Service::get('session')->set('_locale_default', $default_locale); } $Request->setLocale($locale); $Request->setDefaultLocale($default_locale); }
/** * Modifies the ParamConverterManager instance. * * @param FilterControllerEvent $event A FilterControllerEvent instance */ public function onCoreController(FilterControllerEvent $event) { $controller = $event->getController(); $request = $event->getRequest(); $configurations = array(); if ($configuration = $request->attributes->get('_converters')) { $configurations = is_array($configuration) ? $configuration : array($configuration); } if (is_array($controller)) { $r = new \ReflectionMethod($controller[0], $controller[1]); } else { $r = new \ReflectionFunction($controller); } // automatically apply conversion for non-configured objects foreach ($r->getParameters() as $param) { if ($param->getClass() && !$request->attributes->get($param->getName())) { $configuration = new ParamConverter(array()); $configuration->setName($param->getName()); $configuration->setClass($param->getClass()->getName()); $configuration->setIsOptional($param->isOptional()); $configurations[] = $configuration; } } $this->manager->apply($request, $configurations); }
/** * Handles the @Njax() annotation for the found controller action. * * @param FilterControllerEvent $event Event called. */ public function onKernelController(FilterControllerEvent $event) { if (!is_array($controller = $event->getController())) { return; } $request = $event->getRequest(); $njax = $this->container->get('njax'); // force @Njax() annotation for *all* NJAX requests if (!($njaxConfiguration = $request->attributes->get('_njax'))) { if (!$njax->isNjax()) { return; } $njaxConfiguration = new NjaxAnnotation(array()); $request->attributes->set('_njax', $njaxConfiguration); } // force every @Njax() annotation to also trigger @Template() (if not defined) if (!($templateConfiguration = $request->attributes->get('_template'))) { $templateAnnotation = new Template(array()); // if there is @Njax default template set then use this if ($njaxConfiguration->getDefaultTemplate()) { $templateConfiguration = $njaxConfiguration->getDefaultTemplate(); } else { // if not, then try to guess the template name (just like @Template() would do) $guesser = $this->container->get('sensio_framework_extra.view.guesser'); $templateConfiguration = $guesser->guessTemplateName($controller, $request); } $request->attributes->set('_template', $templateConfiguration); } if (!$njaxConfiguration->getDefaultTemplate()) { $njaxConfiguration->setDefaultTemplate($templateConfiguration); } }
public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); $request = $event->getRequest(); $annotation = $this->findAnnotation($controller); if (!$annotation) { return; } $lastTouched = $annotation->calculateLastModified($this->metaQueryFactory); if (!$lastTouched) { return; } $this->lastTouchedResults[$request] = $lastTouched; /* * Für kernel.debug = 1 senden wir niemals * 304-Responses, anstatt den Kernel auszuführen: * * Das Ergebnis hängt auch von vielen Dingen außerhalb * wfd_meta ab (z. B. template-Code), die wir hier nicht * berücksichtigen können. */ if ($this->debug) { return; } $response = new Response(); $response->setLastModified($lastTouched); if ($response->isNotModified($request)) { $event->setController(function () use($response) { return $response; }); } }
/** * Mark request with flag if handled with rest controller * * @param FilterControllerEvent $event */ public function onKernelController(FilterControllerEvent $event) { $callable = $event->getController(); if (is_array($callable) && count($callable) === 2 && $callable[0] instanceof RestController) { $event->getRequest()->attributes->set('__is_rest', true); } }
/** * Creates the method needed from the class- and method name * * @param FilterControllerEvent $event * * @return \ReflectionMethod */ private function getCalledMethod(FilterControllerEvent $event) { list($object, $method) = $event->getController(); $className = get_class($object); $reflectionClass = new \ReflectionClass($className); return $reflectionClass->getMethod($method); }
/** * http://api.symfony.com/2.4/Symfony/Component/HttpKernel/Event/FilterControllerEvent.html * * @param \Symfony\Component\HttpKernel\Event\FilterControllerEvent $event * @return type */ public function onKernelController(FilterControllerEvent $event) { $request = $event->getRequest(); // Request object $seesion = $request->getSession(); $container = $this->container; if (!is_array($controller = $event->getController())) { return; } //if ($request->get('id') || $request->get('keyword')) { $entity = new Tracking(); $entity->setController(get_class($controller[0])); // controller Formation\Bundle\Controller\PageController $entity->setAction($controller[1]); // getNextPageAction getPreviousPageAction $entity->setHttpMethod($request->getMethod()); $entity->setIpRequest($request->getClientIp()); $entity->setIdRequest($request->get('id')); $entity->setLang($seesion->get('_locale')); $entity->setPageRequest($request->get('page')); $entity->setKeywordRequest($request->get('keyword')); $entity->setUriRequest($request->getUri()); $entity->setQueryRequest($request->getQueryString()); $entity->setPathInfo($request->getPathInfo()); $date = new \DateTime('now'); $entity->setCreated($date); $em = $container->get('doctrine')->getManager(); if ($container->get('security.context')->getToken() && $container->get('security.context')->getToken()->getUser()) { if (is_object($container->get('security.context')->getToken()->getUser())) { $user_id = $container->get('security.context')->getToken()->getUser()->getId(); $user = $em->getRepository('UserBundle:User')->find($user_id); $entity->setUser($user); $last_acces = $em->getRepository('TrackingBundle:Tracking')->getLastAccess($user_id); // update last access duration if (is_object($last_acces)) { //exit(\Doctrine\Common\Util\Debug::dump($last_acces->getCreated())); $now = new \DateTime('now'); $diff = $now->getTimestamp() - $last_acces->getCreated()->getTimestamp(); $interval = new \DateTime(); $interval->setTimestamp($diff); $tracking_id = $last_acces->getId(); $tracking = $em->getRepository('TrackingBundle:Tracking')->find($tracking_id); $tracking->setDuration($interval); //exit(\Doctrine\Common\Util\Debug::dump(strtotime($last_acces->getCreated()->format("Y-m-d H:i:s")))); //$em->flush(); } // update formation progression // case 1 : Formation\Bundle\Controller\ChapterController && action=showAction && id_request // get total formation page, get fos_user_formation percent, update percent // case 2 : Formation\Bundle\Controller\PageController && action=getNextPageAction or action=getPreviousPageAction && id_request // get total formation page } } $em->persist($entity); $em->flush(); //var_dump($last_acces->getCreated()); //var_dump($now); //exit(\Doctrine\Common\Util\Debug::dump($interval)); //} }
/** * Determines and sets the Request format * * @param GetResponseEvent $event The event */ public function onKernelController(FilterControllerEvent $event) { $request = $event->getRequest(); /* // TODO get priorities from the controller action $action = $request->attributes->get('_controller'); $controller = $event->getController(); $priorities = */ if (empty($priorities)) { $priorities = $this->defaultPriorities; } $format = null; if (!empty($priorities)) { $format = $this->formatNegotiator->getBestFormat($request, $priorities, $this->preferExtension); } if (null === $format) { $format = $this->fallbackFormat; } if (null === $format) { if ($event->getRequestType() === HttpKernelInterface::MASTER_REQUEST) { throw new HttpException(Codes::HTTP_NOT_ACCEPTABLE, "No matching accepted Response format could be determined"); } return; } $request->setRequestFormat($format); }
public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); if (isset($controller[0]) && is_object($controller[0])) { $controller[0]->preAction(); } }
/** * Modifies the ParamConverterManager instance. * * @param FilterControllerEvent $event A FilterControllerEvent instance */ public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); $request = $event->getRequest(); $configurations = array(); if ($configuration = $request->attributes->get('_converters')) { foreach (is_array($configuration) ? $configuration : array($configuration) as $configuration) { $configurations[$configuration->getName()] = $configuration; } } if (is_array($controller)) { $r = new \ReflectionMethod($controller[0], $controller[1]); } else { $r = new \ReflectionFunction($controller); } // automatically apply conversion for non-configured objects foreach ($r->getParameters() as $param) { if (!$param->getClass() || $param->getClass()->isInstance($request)) { continue; } $name = $param->getName(); if (!isset($configurations[$name])) { $configuration = new ParamConverter(array()); $configuration->setName($name); $configuration->setClass($param->getClass()->getName()); $configurations[$name] = $configuration; } elseif (null === $configurations[$name]->getClass()) { $configurations[$name]->setClass($param->getClass()->getName()); } $configurations[$name]->setIsOptional($param->isOptional()); } $this->manager->apply($request, $configurations); }
/** * Modifies the Request object to apply configuration information found in * controllers annotations like the template to render or HTTP caching * configuration. * * @param FilterControllerEvent $event A FilterControllerEvent instance * * @return void */ public function onKernelController(FilterControllerEvent $event) { if (!is_array($controller = $event->getController())) { return; } $className = class_exists('Doctrine\\Common\\Util\\ClassUtils') ? ClassUtils::getClass($controller[0]) : get_class($controller[0]); $object = new \ReflectionClass($className); $transactional = $this->reader->getClassAnnotation($object, Transactional::NAME); if (!$transactional instanceof Transactional) { return; } $avoidTransaction = $this->reader->getMethodAnnotation($object->getMethod($controller[1]), AvoidTransaction::NAME); if (!is_null($avoidTransaction)) { return; } $request = $event->getRequest(); $modelName = $transactional->model; $model = new $modelName(); $this->transactionBuilder->setRequestMethod($request->getRealMethod()); $this->transactionBuilder->setRequestSource(Transaction::SOURCE_REST); $this->transactionBuilder->setRelatedRoute($transactional->relatedRoute); $ids = []; foreach ($model->getIds() as $field => $value) { $ids[$field] = $request->attributes->get($field); } $this->transactionBuilder->setRelatedIds($ids); $this->transactionBuilder->setModel($transactional->model); $transaction = $this->transactionBuilder->build(); $request->attributes->set('transaction', $transaction); }
/** * Guesses the template name to render and its variables and adds them to * the request object. * * @param FilterControllerEvent $event A FilterControllerEvent instance */ public function onKernelController(FilterControllerEvent $event) { if (!is_array($controller = $event->getController())) { return; } $request = $event->getRequest(); if (!($configuration = $request->attributes->get('_template'))) { return; } if (!$configuration->getTemplate()) { $guesser = $this->container->get('sensio_framework_extra.view.guesser'); $configuration->setTemplate($guesser->guessTemplateName($controller, $request, $configuration->getEngine())); } $request->attributes->set('_template', $configuration->getTemplate()); $request->attributes->set('_template_vars', $configuration->getVars()); $request->attributes->set('_template_streamable', $configuration->isStreamable()); // all controller method arguments if (!$configuration->getVars()) { $r = new \ReflectionObject($controller[0]); $vars = array(); foreach ($r->getMethod($controller[1])->getParameters() as $param) { $vars[] = $param->getName(); } $request->attributes->set('_template_default_vars', $vars); } }
/** * Core controller handler. * * @param FilterControllerEvent $event * * @throws \InvalidArgumentException */ public function onKernelController(FilterControllerEvent $event) { $request = $event->getRequest(); if (!$request->attributes->get(FOSRestBundle::ZONE_ATTRIBUTE, true)) { return; } $paramFetcher = $this->container->get('fos_rest.request.param_fetcher'); $controller = $event->getController(); if (is_callable($controller) && method_exists($controller, '__invoke')) { $controller = [$controller, '__invoke']; } $paramFetcher->setController($controller); $attributeName = $this->getAttributeName($controller); $request->attributes->set($attributeName, $paramFetcher); if ($this->setParamsAsAttributes) { $params = $paramFetcher->all(); foreach ($params as $name => $param) { if ($request->attributes->has($name) && null !== $request->attributes->get($name)) { $msg = sprintf("ParamFetcher parameter conflicts with a path parameter '{$name}' for route '%s'", $request->attributes->get('_route')); throw new \InvalidArgumentException($msg); } $request->attributes->set($name, $param); } } }
/** * Handles HTTP validation headers. */ public function onKernelController(FilterControllerEvent $event) { $request = $event->getRequest(); if (!($configuration = $request->attributes->get('_cache'))) { return; } $response = new Response(); $lastModifiedDate = ''; if ($configuration->getLastModified()) { $lastModifiedDate = $this->getExpressionLanguage()->evaluate($configuration->getLastModified(), $request->attributes->all()); $response->setLastModified($lastModifiedDate); } $etag = ''; if ($configuration->getETag()) { $etag = hash('sha256', $this->getExpressionLanguage()->evaluate($configuration->getETag(), $request->attributes->all())); $response->setETag($etag); } if ($response->isNotModified($request)) { $event->setController(function () use($response) { return $response; }); } else { if ($etag) { $this->etags[$request] = $etag; } if ($lastModifiedDate) { $this->lastModifiedDates[$request] = $lastModifiedDate; } } }
/** * @param FilterControllerEvent $event */ public function onKernelController(FilterControllerEvent $event) { $request = $event->getRequest(); // Check if the event has a nodeTranslation, if not this method can be skipped if (!$request->attributes->has('_nodeTranslation')) { return; } $nodeTranslation = $request->attributes->get('_nodeTranslation'); if (!$nodeTranslation instanceof NodeTranslation) { $nodeTranslation = $this->em->getRepository('KunstmaanNodeBundle:NodeTranslation')->find($nodeTranslation); $request->attributes->set('_nodeTranslation', $nodeTranslation); } $entity = $nodeTranslation->getRef($this->em); // If the entity is an instance of the SlugActionInterface, change the controller if ($entity instanceof SlugActionInterface) { $request->attributes->set('_entity', $entity); // Do security check by firing an event that gets handled by the SlugSecurityListener $securityEvent = new SlugSecurityEvent(); $securityEvent->setNode($nodeTranslation->getNode())->setEntity($entity)->setRequest($request)->setNodeTranslation($nodeTranslation); $this->eventDispatcher->dispatch(Events::SLUG_SECURITY, $securityEvent); // Set the right controller $request->attributes->set('_controller', $entity->getControllerAction()); $event->setController($this->resolver->getController($request)); } }
public function onKernelController(FilterControllerEvent $event) { $request = $event->getRequest(); if (!$request->attributes->has('_api')) { return; } /** @var Api $apiCommand */ $apiCommand = $request->attributes->get('_api'); if (!($type = $apiCommand->getType())) { return; } $formOptions = ['csrf_protection' => false, 'validation_groups' => $apiCommand->getGroups(), 'allow_extra_fields' => true]; if (!count($apiCommand->getGroups()) !== 0) { $formOptions['validation_groups'] = $apiCommand->getGroups(); } $formData = null; if ($request->attributes->has($apiCommand->getName())) { $formData = $request->attributes->get($apiCommand->getName()); } $form = $this->formFactory->createNamed('', $type, $formData, $formOptions); // "Loose" form submission, POST => GET => FILES. // @todo: Throw exception on parameter collision. $form->submit(array_replace_recursive($request->request->all(), $request->query->all(), $request->files->all()), !$request->isMethod('PATCH')); if (!$form->isValid()) { throw new CommandInvalidException($type, $form); } $request->attributes->set($apiCommand->getName(), $form->getData()); }
/** * Detects if there is a custom controller to use to render a Block. * * @param FilterControllerEvent $event * * @throws \Symfony\Component\Security\Core\Exception\AccessDeniedException */ public function getController(FilterControllerEvent $event) { $request = $event->getRequest(); // Only taking page related controller (i.e. ez_page:viewBlock or ez_page:viewBlockById) if (strpos($request->attributes->get('_controller'), 'ez_page:') === false) { return; } try { if ($request->attributes->has('id')) { $valueObject = $this->pageService->loadBlock($request->attributes->get('id')); $request->attributes->set('block', $valueObject); } elseif ($request->attributes->get('block') instanceof Block) { $valueObject = $request->attributes->get('block'); $request->attributes->set('id', $valueObject->id); } } catch (UnauthorizedException $e) { throw new AccessDeniedException(); } if (!isset($valueObject)) { $this->logger->error('Could not resolve a page controller, invalid value object to match.'); return; } $controllerReference = $this->controllerManager->getControllerReference($valueObject, 'block'); if (!$controllerReference instanceof ControllerReference) { return; } $request->attributes->set('_controller', $controllerReference->controller); $event->setController($this->controllerResolver->getController($request)); }
/** * Sets the cache key on the alias manager cache decorator. * * KernelEvents::CONTROLLER is used in order to be executed after routing. * * @param \Symfony\Component\HttpKernel\Event\FilterControllerEvent $event * The Event to process. */ public function onKernelController(FilterControllerEvent $event) { // Set the cache key on the alias manager cache decorator. if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) { $this->aliasManager->setCacheKey(rtrim($this->currentPath->getPath($event->getRequest()), '/')); } }
public function apply(FilterControllerEvent $event) { $controller = $event->getController(); $request = $event->getRequest(); if (is_array($controller)) { $reflected = new ReflectionMethod($controller[0], $controller[1]); } elseif (is_object($controller) && is_callable($controller, '__invoke')) { $reflected = new ReflectionMethod($controller, '__invoke'); } else { $reflected = new ReflectionFunction($controller); } foreach ($reflected->getParameters() as $param) { // Ignore non-classes or the request instance if ($param->getClass() && !$param->getClass()->isInstance($request)) { $value = null; $class = $param->getClass()->getName(); if ($class === 'Backpack\\Controller\\Request\\FormRequestInterface') { $value = new FormRequest($request, $this->container->get('form.factory')); } if ($value !== null) { $request->attributes->set($param->getName(), $value); } } } }
public function onKernelController(FilterControllerEvent $event) { if (!is_array($controller = $event->getController())) { return; } list($ctrl, $action) = $controller; $ref = new \ReflectionClass($ctrl); $annotations = $this->reader->getMethodAnnotations($ref->getMethod($action)); $acl = current(array_filter($annotations, function ($annotation) { return $annotation instanceof ACL; })); if ($acl) { if (strlen($acl->value)) { $parts = explode('.', $acl->value); $action = array_pop($parts); $resource = implode('.', $parts); } else { $resource = Util::classToResource($ctrl); $action = Util::underscore(preg_replace('/Action$/', '', $action)); } if (!($allowed = $this->dm->isGranted($action, $resource))) { throw new AccessDeniedHttpException("User is not allowed to \"{$action}\" resource: \"{$resource}\""); } } }
/** * Update the user "lastActivity" on each request * * @param FilterControllerEvent $event */ public function onCoreController(FilterControllerEvent $event) { // Here we are checking that the current request is a "MASTER_REQUEST", // and ignore any // subrequest in the process (for example when // doing a render() in a twig template) if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) { return; } // We are checking a token authentification is available before using // the User if ($this->securityContext->getToken()) { $user = $this->securityContext->getToken()->getUser(); // We are using a delay during wich the user will be considered as // still active, in order to // avoid too much UPDATE in the // database // $delay = new \DateTime (); // $delay->setTimestamp (strtotime ('2 minutes ago')); // We are checking the Admin class in order to be certain we can // call "getLastActivity". // && $user->getLastActivity() < $delay) { if ($user instanceof User) { $user->isActiveNow(); $this->em->persist($user); $this->em->flush(); } } }
public function onKernelController(FilterControllerEvent $event) { if (!is_array($controller = $event->getController())) { return; } $request = $event->getRequest(); if (!($configuration = $request->attributes->get('_acl_permission'))) { return; } $refl = new \ReflectionMethod($controller[0], $controller[1]); foreach ($refl->getParameters() as $param) { if (!$param->getClass() || $param->getClass()->isInstance($request)) { continue; } $name = $param->getName(); $object = $request->get($name); if (is_null($object)) { continue; } $mask = null; foreach ($configuration as $config) { if (!is_null($mask = $config->getEntry($name))) { continue; } } if (is_null($mask)) { continue; } if (!$this->manager->isGranted($mask, $object)) { throw new AccessDeniedException('Acl permission for this object is not granted.'); } } }
public function onKernelController(FilterControllerEvent $event) { if (!$this->isTrackingEnabled) { return; } $controller = $event->getController(); /* * $controller passed can be either a class or a Closure. * This is not usual in Symfony but it may happen. * If it is a class, it comes in array format * @link http://symfony.com/doc/current/event_dispatcher/before_after_filters.html#creating-an-event-listener */ if (!is_array($controller)) { return; } $controller = $controller[0]; if ($controller instanceof Controller) { $request = $event->getRequest(); $path = $request->getRequestUri(); $host = $request->getHost(); $title = get_class($controller); $data = ['dh' => $host, 'dp' => $path, 'dt' => $title]; try { $this->tracker->send($data, 'pageview'); } catch (\Exception $e) { $this->logger->error('Failed to send tracking data.', ['exception' => $e]); } } }
/** * @param FilterControllerEvent $event */ public function onKernelController(FilterControllerEvent $event) { if (HttpKernel::MASTER_REQUEST == $event->getRequestType()) { $this->linkProvider->setRequest($event->getRequest()); } return; }
public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); if (!is_array($controller)) { return; } $session = $event->getRequest()->getSession(); /** @var BaseController $ctrl */ $ctrl = $controller[0]; if (!is_object($ctrl) || !$ctrl instanceof BaseController) { return; } // no loop for you, also allow username checking if ($ctrl instanceof ProfileController && ($controller[1] == 'updateUsernameAction' || $controller[1] == 'checkUsernameAction')) { return; } /** @var User $user */ $user = $ctrl->getUser(); if ($user && $this->isGUID($user->getUsername())) { $session->getFlashBag()->add('error', "We recently changed our username restrictions. Your previous username is no longer valid. Please create a new one."); $url = $this->router->generate('reset_username'); $event->setController(function () use($url) { return new RedirectResponse($url); }); } }
public function onCoreController(FilterControllerEvent $event) { if (!is_array($controller = $event->getController())) { return; } $method = new \ReflectionMethod($controller[0], $controller[1]); if (!($annotations = $this->reader->getMethodAnnotations($method))) { return; } foreach ($annotations as $annotation) { if ($annotation instanceof LayoutAnnotation) { if ($annotation->getPosition()) { $root = $this->em->getRepository('TemplateDesignerLayoutBundle:Layout')->findLayoutWitOptions($annotation->getName(), $annotation->getPosition()); } else { $root = $this->em->getRepository('TemplateDesignerLayoutBundle:Layout')->findOneBy(array('name' => $annotation->getName())); } if (!$annotation->getPosition() && !$annotation->getName()) { throw new \Exception("Parameter missing in layout annotation", 1); } if (!$root) { throw new NotFoundHttpException('Layout not found'); } $route_params = $event->getRequest()->attributes->get('_route_params'); $route_params['rootLayout'] = $root; $event->getRequest()->attributes->set('_route_params', $route_params); } } }
public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); $instance = $controller[0]; if (!$instance instanceof \Dinnovos\Amazonas\Controllers\InstallController) { $instance->settings = \Settings::prepareSettings(); $instance->addMethod(function ($label, $default = -1) use($instance) { if (isset($instance->settings[$label])) { return $instance->settings[$label]; } return $default === -1 ? null : $default; }, "getSetting"); } $instance->addMethod(function () use($instance) { return $instance->forward('Dinnovos\\Amazonas:Errors:error402'); }, "responseError402"); $instance->addMethod(function () use($instance) { return $instance->forward('Dinnovos\\Amazonas:Errors:error404'); }, "responseError404"); $instance->addMethod(function () use($instance) { return $instance->forward('Dinnovos\\Amazonas:Errors:error405'); }, "responseError402"); $instance->addMethod(function () use($instance) { return $instance->forward('Dinnovos\\Amazonas:Errors:error423'); }, "responseError423"); }
public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); /* * $controller passed can be either a class or a Closure. * This is not usual in Symfony but it may happen. * If it is a class, it comes in array format */ if (!is_array($controller)) { return; } if ($controller[0] instanceof AccountAccessInterface) { $accountName = $event->getRequest()->attributes->get('accountName'); $accounts = $controller[0]->getUser()->getAccounts(); $hasAccount = false; foreach ($accounts as $account) { if ($account->getName() == $accountName) { $hasAccount = true; break; } } if (!$hasAccount) { throw new AccessDeniedHttpException('Access denied.'); } $filter = $this->entityManager->getFilters()->enable('account_check_filter'); $filter->setParameter('account', $account->getId()); $event->getRequest()->attributes->set('accountTitle', $account->getTitle()); $router = $controller[0]->get('router'); $routeCollection = $router->getRouteCollection(); foreach ($routeCollection as $route) { $route->setDefault('accountName', $accountName); } } }