Skip to content

Commit

Permalink
[FrameworkBundle] Check if the _route attribute exists on the request
Browse files Browse the repository at this point in the history
  • Loading branch information
xvilo authored and nicolas-grekas committed Feb 14, 2024
1 parent c0d31ca commit aee0792
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 1 deletion.
2 changes: 1 addition & 1 deletion DataCollector/RouterDataCollector.php
Expand Up @@ -28,7 +28,7 @@ public function guessRoute(Request $request, $controller)
$controller = $controller[0];
}

if ($controller instanceof RedirectController) {
if ($controller instanceof RedirectController && $request->attributes->has('_route')) {
return $request->attributes->get('_route');
}

Expand Down
66 changes: 66 additions & 0 deletions Tests/DataCollector/RouterDataCollectorTest.php
@@ -0,0 +1,66 @@
<?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\Bundle\FrameworkBundle\Tests\DataCollector;

use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
use Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector;
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelInterface;

class RouterDataCollectorTest extends TestCase
{
public function testRouteRedirectControllerNoRouteAtrribute()
{
$collector = new RouterDataCollector();

$request = Request::create('http://test.com/foo?bar=baz');
$response = new RedirectResponse('http://test.com/redirect');

$event = $this->createControllerEvent($request);

$collector->onKernelController($event);
$collector->collect($request, $response);

$this->assertTrue($collector->getRedirect());
$this->assertEquals('http://test.com/redirect', $collector->getTargetUrl());
$this->assertEquals('n/a', $collector->getTargetRoute());
}

public function testRouteRedirectControllerWithRouteAttribute()
{
$collector = new RouterDataCollector();

$request = Request::create('http://test.com/foo?bar=baz');
$request->attributes->set('_route', 'current-route');

$response = new RedirectResponse('http://test.com/redirect');

$event = $this->createControllerEvent($request);

$collector->onKernelController($event);
$collector->collect($request, $response);

$this->assertTrue($collector->getRedirect());
$this->assertEquals('http://test.com/redirect', $collector->getTargetUrl());
$this->assertEquals('current-route', $collector->getTargetRoute());
}

protected function createControllerEvent(Request $request): ControllerEvent
{
$kernel = $this->createMock(KernelInterface::class);

return new ControllerEvent($kernel, new RedirectController(), $request, null);
}
}

0 comments on commit aee0792

Please sign in to comment.