Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 3.4: [Yaml] Clarify "incompatible key casting" deprecation message minor #23043 add \ to PHP_VERSION_ID fixes #22650 [PhpUnitBridge] Fix detection of PHPUnit 5 Adding a new event subscriber that "parses" the _controller attribute in the FW
- Loading branch information
Showing
11 changed files
with
188 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
src/Symfony/Bundle/FrameworkBundle/EventListener/ResolveControllerNameSubscriber.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
<?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\EventListener; | ||
|
||
use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser; | ||
use Symfony\Component\EventDispatcher\EventSubscriberInterface; | ||
use Symfony\Component\HttpKernel\Event\GetResponseEvent; | ||
use Symfony\Component\HttpKernel\KernelEvents; | ||
|
||
/** | ||
* Guarantees that the _controller key is parsed into its final format. | ||
* | ||
* @author Ryan Weaver <ryan@knpuniversity.com> | ||
*/ | ||
class ResolveControllerNameSubscriber implements EventSubscriberInterface | ||
{ | ||
private $parser; | ||
|
||
public function __construct(ControllerNameParser $parser) | ||
{ | ||
$this->parser = $parser; | ||
} | ||
|
||
public function onKernelRequest(GetResponseEvent $event) | ||
{ | ||
$controller = $event->getRequest()->attributes->get('_controller'); | ||
if ($controller && false === strpos($controller, '::') && 2 === substr_count($controller, ':')) { | ||
// controller in the a:b:c notation then | ||
$event->getRequest()->attributes->set('_controller', $this->parser->parse($controller)); | ||
} | ||
} | ||
|
||
public static function getSubscribedEvents() | ||
{ | ||
return array( | ||
KernelEvents::REQUEST => array('onKernelRequest', 24), | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
...ymfony/Bundle/FrameworkBundle/Tests/EventListener/ResolveControllerNameSubscriberTest.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
<?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\EventListener; | ||
|
||
use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser; | ||
use Symfony\Bundle\FrameworkBundle\EventListener\ResolveControllerNameSubscriber; | ||
use Symfony\Bundle\FrameworkBundle\Tests\TestCase; | ||
use Symfony\Component\HttpFoundation\Request; | ||
use Symfony\Component\HttpKernel\Event\GetResponseEvent; | ||
use Symfony\Component\HttpKernel\HttpKernelInterface; | ||
|
||
class ResolveControllerNameSubscriberTest extends TestCase | ||
{ | ||
public function testReplacesControllerAttribute() | ||
{ | ||
$parser = $this->getMockBuilder(ControllerNameParser::class)->disableOriginalConstructor()->getMock(); | ||
$parser->expects($this->any()) | ||
->method('parse') | ||
->with('AppBundle:Starting:format') | ||
->willReturn('App\\Final\\Format::methodName'); | ||
$httpKernel = $this->getMockBuilder(HttpKernelInterface::class)->getMock(); | ||
|
||
$request = new Request(); | ||
$request->attributes->set('_controller', 'AppBundle:Starting:format'); | ||
|
||
$subscriber = new ResolveControllerNameSubscriber($parser); | ||
$subscriber->onKernelRequest(new GetResponseEvent($httpKernel, $request, HttpKernelInterface::MASTER_REQUEST)); | ||
$this->assertEquals('App\\Final\\Format::methodName', $request->attributes->get('_controller')); | ||
} | ||
|
||
public function testSkipsOtherControllerFormats() | ||
{ | ||
$parser = $this->getMockBuilder(ControllerNameParser::class)->disableOriginalConstructor()->getMock(); | ||
$parser->expects($this->never()) | ||
->method('parse'); | ||
$httpKernel = $this->getMockBuilder(HttpKernelInterface::class)->getMock(); | ||
|
||
$request = new Request(); | ||
$request->attributes->set('_controller', 'Other:format'); | ||
|
||
$subscriber = new ResolveControllerNameSubscriber($parser); | ||
$subscriber->onKernelRequest(new GetResponseEvent($httpKernel, $request, HttpKernelInterface::MASTER_REQUEST)); | ||
$this->assertEquals('Other:format', $request->attributes->get('_controller')); | ||
} | ||
} |
38 changes: 38 additions & 0 deletions
38
...e/Tests/Functional/Bundle/TestBundle/Controller/SubRequestServiceResolutionController.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
<?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\Functional\Bundle\TestBundle\Controller; | ||
|
||
use Psr\Log\LoggerInterface; | ||
use Symfony\Component\DependencyInjection\ContainerAwareInterface; | ||
use Symfony\Component\DependencyInjection\ContainerAwareTrait; | ||
use Symfony\Component\HttpFoundation\Response; | ||
use Symfony\Component\HttpKernel\HttpKernelInterface; | ||
|
||
class SubRequestServiceResolutionController implements ContainerAwareInterface | ||
{ | ||
use ContainerAwareTrait; | ||
|
||
public function indexAction() | ||
{ | ||
$request = $this->container->get('request_stack')->getCurrentRequest(); | ||
$path['_forwarded'] = $request->attributes; | ||
$path['_controller'] = 'TestBundle:SubRequestServiceResolution:fragment'; | ||
$subRequest = $request->duplicate(array(), null, $path); | ||
|
||
return $this->container->get('http_kernel')->handle($subRequest, HttpKernelInterface::SUB_REQUEST); | ||
} | ||
|
||
public function fragmentAction(LoggerInterface $logger) | ||
{ | ||
return new Response('---'); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
...mfony/Bundle/FrameworkBundle/Tests/Functional/app/ControllerServiceResolution/bundles.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<?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. | ||
*/ | ||
|
||
use Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestBundle; | ||
use Symfony\Bundle\FrameworkBundle\FrameworkBundle; | ||
|
||
return array( | ||
new FrameworkBundle(), | ||
new TestBundle(), | ||
); |
10 changes: 10 additions & 0 deletions
10
...ymfony/Bundle/FrameworkBundle/Tests/Functional/app/ControllerServiceResolution/config.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
imports: | ||
- { resource: ../config/default.yml } | ||
|
||
services: | ||
Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\Controller\SubRequestServiceResolutionController: | ||
public: true | ||
tags: [controller.service_arguments] | ||
|
||
logger: { class: Psr\Log\NullLogger } | ||
Psr\Log\LoggerInterface: '@logger' |
4 changes: 4 additions & 0 deletions
4
...mfony/Bundle/FrameworkBundle/Tests/Functional/app/ControllerServiceResolution/routing.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
sub_request_page: | ||
path: /subrequest | ||
defaults: | ||
_controller: 'TestBundle:SubRequestServiceResolution:index' |