1313
1414use Psr \Container \ContainerInterface as Psr11ContainerInterface ;
1515use Psr \Log \LoggerInterface ;
16+ use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
1617use Symfony \Bundle \FrameworkBundle \Controller \ControllerNameParser ;
1718use Symfony \Bundle \FrameworkBundle \Controller \ControllerResolver ;
1819use Symfony \Component \DependencyInjection \Container ;
@@ -68,6 +69,24 @@ public function testGetControllerWithBundleNotation()
6869 $ this ->assertSame ('testAction ' , $ controller [1 ]);
6970 }
7071
72+ public function testContainerAwareControllerGetsContainerWhenNotSet ()
73+ {
74+ class_exists (AbstractControllerTest::class);
75+
76+ $ controller = new ContainerAwareController ();
77+
78+ $ container = new Container ();
79+ $ container ->set (TestAbstractController::class, $ controller );
80+
81+ $ resolver = $ this ->createControllerResolver (null , $ container );
82+
83+ $ request = Request::create ('/ ' );
84+ $ request ->attributes ->set ('_controller ' , TestAbstractController::class.':testAction ' );
85+
86+ $ this ->assertSame (array ($ controller , 'testAction ' ), $ resolver ->getController ($ request ));
87+ $ this ->assertSame ($ container , $ controller ->getContainer ());
88+ }
89+
7190 public function testAbstractControllerGetsContainerWhenNotSet ()
7291 {
7392 class_exists (AbstractControllerTest::class);
@@ -86,6 +105,24 @@ class_exists(AbstractControllerTest::class);
86105 $ this ->assertSame ($ container , $ controller ->setContainer ($ container ));
87106 }
88107
108+ public function testAbstractControllerServiceWithFcqnIdGetsContainerWhenNotSet ()
109+ {
110+ class_exists (AbstractControllerTest::class);
111+
112+ $ controller = new DummyController ();
113+
114+ $ container = new Container ();
115+ $ container ->set (DummyController::class, $ controller );
116+
117+ $ resolver = $ this ->createControllerResolver (null , $ container );
118+
119+ $ request = Request::create ('/ ' );
120+ $ request ->attributes ->set ('_controller ' , DummyController::class.':fooAction ' );
121+
122+ $ this ->assertSame (array ($ controller , 'fooAction ' ), $ resolver ->getController ($ request ));
123+ $ this ->assertSame ($ container , $ controller ->getContainer ());
124+ }
125+
89126 public function testAbstractControllerGetsNoContainerWhenSet ()
90127 {
91128 class_exists (AbstractControllerTest::class);
@@ -106,6 +143,26 @@ class_exists(AbstractControllerTest::class);
106143 $ this ->assertSame ($ controllerContainer , $ controller ->setContainer ($ container ));
107144 }
108145
146+ public function testAbstractControllerServiceWithFcqnIdGetsNoContainerWhenSet ()
147+ {
148+ class_exists (AbstractControllerTest::class);
149+
150+ $ controller = new DummyController ();
151+ $ controllerContainer = new Container ();
152+ $ controller ->setContainer ($ controllerContainer );
153+
154+ $ container = new Container ();
155+ $ container ->set (DummyController::class, $ controller );
156+
157+ $ resolver = $ this ->createControllerResolver (null , $ container );
158+
159+ $ request = Request::create ('/ ' );
160+ $ request ->attributes ->set ('_controller ' , DummyController::class.':fooAction ' );
161+
162+ $ this ->assertSame (array ($ controller , 'fooAction ' ), $ resolver ->getController ($ request ));
163+ $ this ->assertSame ($ controllerContainer , $ controller ->getContainer ());
164+ }
165+
109166 protected function createControllerResolver (LoggerInterface $ logger = null , Psr11ContainerInterface $ container = null , ControllerNameParser $ parser = null )
110167 {
111168 if (!$ parser ) {
@@ -152,3 +209,15 @@ public function __invoke()
152209 {
153210 }
154211}
212+
213+ class DummyController extends AbstractController
214+ {
215+ public function getContainer ()
216+ {
217+ return $ this ->container ;
218+ }
219+
220+ public function fooAction ()
221+ {
222+ }
223+ }
0 commit comments