Skip to content
Snippets Groups Projects
Select Git revision
  • e699144c5f45a2d2dfaa7e06acd6b0746d3cde7b
  • master default protected
  • ll-api-test
  • php84
  • detached3
  • detached4
  • detached
  • detached2
  • 5.x
  • trydeps
  • 4.x
  • 6.1.0
  • 6.0.2
  • 6.0.1
  • 6.0
  • 5.0.0
  • 4.0.1
  • 4.0.0
  • 3.0.0
19 results

RedirectCallback.php

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    RedirectCallback.php 3.34 KiB
    <?php
    
    namespace ZfcUser\Controller;
    
    use Laminas\Mvc\Application;
    use Laminas\Router\RouteInterface;
    use Laminas\Router\Exception;
    use Laminas\Http\PhpEnvironment\Response;
    use ZfcUser\Options\ModuleOptions;
    
    /**
     * Buils a redirect response based on the current routing and parameters
     */
    class RedirectCallback
    {
    
        /** @var RouteInterface  */
        private $router;
    
        /** @var Application */
        private $application;
    
        /** @var ModuleOptions */
        private $options;
    
        /**
         * @param Application $application
         * @param RouteInterface $router
         * @param ModuleOptions $options
         */
        public function __construct(Application $application, RouteInterface $router, ModuleOptions $options)
        {
            $this->router = $router;
            $this->application = $application;
            $this->options = $options;
        }
    
        /**
         * @return Response
         */
        public function __invoke()
        {
            $routeMatch = $this->application->getMvcEvent()->getRouteMatch();
            $redirect = $this->getRedirect($routeMatch->getMatchedRouteName(), $this->getRedirectRouteFromRequest());
    
            $response = $this->application->getResponse();
            $response->getHeaders()->addHeaderLine('Location', $redirect);
            $response->setStatusCode(302);
            return $response;
        }
    
        /**
         * Return the redirect from param.
         * First checks GET then POST
         * @return string
         */
        private function getRedirectRouteFromRequest()
        {
            $request  = $this->application->getRequest();
            $redirect = $request->getQuery('redirect');
            if ($redirect && $this->routeExists($redirect)) {
                return $redirect;
            }
    
            $redirect = $request->getPost('redirect');
            if ($redirect && $this->routeExists($redirect)) {
                return $redirect;
            }
    
            return false;