Select Git revision
RedirectCallback.php
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;