Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Nov 15, 2018. It is now read-only.

Commit 55b626f

Browse files
committed
Support setter autowiring
1 parent 401d3b1 commit 55b626f

File tree

6 files changed

+70
-5
lines changed

6 files changed

+70
-5
lines changed

DependencyInjection/DunglasActionExtension.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,11 @@ private function registerClass(ContainerBuilder $container, $className, array $t
127127
}
128128

129129
$definition = $container->register($className, $className);
130-
$definition->setAutowired(true);
130+
if (method_exists($definition, 'setAutowiredMethods')) {
131+
$definition->setAutowiredMethods(['__construct', 'set*']);
132+
} else {
133+
$definition->setAutowired(true);
134+
}
131135

132136
// Inject the container if applicable
133137
if (is_a($className, ContainerAwareInterface::class, true)) {

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public function testInvalidTag()
6060
{
6161
$processor = new Processor();
6262

63-
$config = $processor->processConfiguration(new Configuration(true), [[
63+
$processor->processConfiguration(new Configuration(true), [[
6464
'tags' => [__CLASS__ => [['console.command', 'invalid']]],
6565
]]);
6666
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
/*
4+
* (c) Kévin Dunglas <[email protected]>
5+
*
6+
* This source file is subject to the MIT license that is bundled
7+
* with this source code in the file LICENSE.
8+
*/
9+
10+
namespace Dunglas\ActionBundle\Tests\Fixtures\TestBundle\Action;
11+
12+
use Dunglas\ActionBundle\Tests\Fixtures\TestBundle\DummyService;
13+
use Symfony\Component\HttpFoundation\Response;
14+
15+
/**
16+
* @author Kévin Dunglas <[email protected]>
17+
*/
18+
class SetterAction
19+
{
20+
/**
21+
* @var DummyService
22+
*/
23+
private $dummyService;
24+
25+
public function setDummyService(DummyService $dummyService)
26+
{
27+
$this->dummyService = $dummyService;
28+
}
29+
30+
public function __invoke()
31+
{
32+
$this->dummyService->doSomething();
33+
34+
return new Response('setter');
35+
}
36+
}

Tests/Fixtures/TestKernel.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88
*/
99

1010
use Dunglas\ActionBundle\DunglasActionBundle;
11+
use Dunglas\ActionBundle\Tests\Fixtures\IsolatedAction\AnIsolatedAction;
1112
use Dunglas\ActionBundle\Tests\Fixtures\NotScannedBundle\NotScannedBundle;
13+
use Dunglas\ActionBundle\Tests\Fixtures\TestBundle\Action\DummyAction;
14+
use Dunglas\ActionBundle\Tests\Fixtures\TestBundle\Action\OverrideAction;
15+
use Dunglas\ActionBundle\Tests\Fixtures\TestBundle\Action\SetterAction;
1216
use Dunglas\ActionBundle\Tests\Fixtures\TestBundle\TestBundle;
1317
use Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle;
1418
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
@@ -45,8 +49,9 @@ public function registerBundles()
4549
protected function configureRoutes(RouteCollectionBuilder $routes)
4650
{
4751
// Specify explicitly the controller
48-
$routes->add('/', 'Dunglas\ActionBundle\Tests\Fixtures\TestBundle\Action\DummyAction', 'dummy');
49-
$routes->add('/isolated', 'Dunglas\ActionBundle\Tests\Fixtures\IsolatedAction\AnIsolatedAction', 'isolated');
52+
$routes->add('/', DummyAction::class, 'dummy');
53+
$routes->add('/isolated', AnIsolatedAction::class, 'isolated');
54+
$routes->add('/setter', SetterAction::class, 'setter');
5055

5156
// Use the @Route annotation
5257
$routes->import('@TestBundle/Action/', '/', 'annotation');
@@ -77,6 +82,6 @@ protected function configureContainer(ContainerBuilder $c, LoaderInterface $load
7782
],
7883
]);
7984

80-
$c->register('Dunglas\ActionBundle\Tests\Fixtures\TestBundle\Action\OverrideAction', 'Dunglas\ActionBundle\Tests\Fixtures\TestBundle\Action\OverrideAction');
85+
$c->register(OverrideAction::class, OverrideAction::class);
8186
}
8287
}

Tests/FunctionalTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
namespace Dunglas\ActionBundle\Tests;
1111

1212
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
13+
use Symfony\Component\DependencyInjection\Definition;
1314

1415
/**
1516
* @author Kévin Dunglas <[email protected]>
@@ -90,4 +91,16 @@ public function testCanAccessTraditionalController()
9091
$crawler = $client->request('GET', '/traditional');
9192
$this->assertSame('traditional', $crawler->text());
9293
}
94+
95+
public function testSetterAutowiring()
96+
{
97+
if (!method_exists(Definition::class, 'setAutowiredMethods')) {
98+
$this->markTestSkipped('Setter autowiring requires Symfony 3.3+');
99+
}
100+
101+
$client = static::createClient();
102+
103+
$crawler = $client->request('GET', '/setter');
104+
$this->assertSame('setter', $crawler->text());
105+
}
93106
}

composer.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212
"homepage": "https://dunglas.fr"
1313
}
1414
],
15+
"repositories": [
16+
{
17+
"type": "vcs",
18+
"url": "https://github.com/dunglas/symfony"
19+
}
20+
],
1521
"require": {
1622
"php": ">=5.5.9 <7.2.0",
1723
"symfony/config": "~2.8||~3.0",
@@ -20,6 +26,7 @@
2026
"symfony/http-kernel": "~2.8||~3.0"
2127
},
2228
"require-dev": {
29+
"symfony/symfony": "dev-autowiring as 3.3.0",
2330
"phpunit/phpunit": "^5.0||^4.6",
2431
"sensio/framework-extra-bundle": "^3.0.10",
2532
"symfony/console": "~2.8||~3.0",

0 commit comments

Comments
 (0)