2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\HttpKernel\DataCollector ;
2018-11-23 12:29:20 +00:00
use Symfony\Component\HttpFoundation\RedirectResponse ;
2015-08-17 17:00:26 -07:00
use Symfony\Component\HttpFoundation\Request ;
use Symfony\Component\HttpFoundation\Response ;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent ;
/**
* RouterDataCollector .
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
class RouterDataCollector extends DataCollector
{
2018-11-23 12:29:20 +00:00
/**
* @ var \SplObjectStorage
*/
2015-08-17 17:00:26 -07:00
protected $controllers ;
public function __construct ()
{
2018-11-23 12:29:20 +00:00
$this -> reset ();
2015-08-17 17:00:26 -07:00
}
/**
* { @ inheritdoc }
*/
public function collect ( Request $request , Response $response , \Exception $exception = null )
{
if ( $response instanceof RedirectResponse ) {
$this -> data [ 'redirect' ] = true ;
$this -> data [ 'url' ] = $response -> getTargetUrl ();
if ( $this -> controllers -> contains ( $request )) {
$this -> data [ 'route' ] = $this -> guessRoute ( $request , $this -> controllers [ $request ]);
}
}
unset ( $this -> controllers [ $request ]);
}
2018-11-23 12:29:20 +00:00
public function reset ()
{
$this -> controllers = new \SplObjectStorage ();
$this -> data = array (
'redirect' => false ,
'url' => null ,
'route' => null ,
);
}
2015-08-17 17:00:26 -07:00
protected function guessRoute ( Request $request , $controller )
{
return 'n/a' ;
}
/**
* Remembers the controller associated to each request .
*/
public function onKernelController ( FilterControllerEvent $event )
{
$this -> controllers [ $event -> getRequest ()] = $event -> getController ();
}
/**
* @ return bool Whether this request will result in a redirect
*/
public function getRedirect ()
{
return $this -> data [ 'redirect' ];
}
/**
* @ return string | null The target URL
*/
public function getTargetUrl ()
{
return $this -> data [ 'url' ];
}
/**
* @ return string | null The target route
*/
public function getTargetRoute ()
{
return $this -> data [ 'route' ];
}
/**
* { @ inheritdoc }
*/
public function getName ()
{
return 'router' ;
}
}