Skip to content

Commit 9641d8b

Browse files
committed
Merge pull request #318 from pamil/route-basepaths-initializer
Made PHPCR initializer independent, creating all route_basepaths
2 parents e3ad1c0 + 49e6cb1 commit 9641d8b

File tree

5 files changed

+101
-10
lines changed

5 files changed

+101
-10
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ matrix:
3434

3535
before_install:
3636
- if [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]]; then echo "memory_limit = -1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi
37+
- phpenv config-rm xdebug.ini || true
38+
3739
- composer self-update
3840
- composer require symfony/symfony:${SYMFONY_VERSION} --no-update
3941

DependencyInjection/CmfRoutingExtension.php

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,10 @@ private function loadPhpcrProvider($config, XmlFileLoader $loader, ContainerBuil
223223
if ($config['use_sonata_admin']) {
224224
$this->loadSonataPhpcrAdmin($config, $loader, $container);
225225
}
226+
227+
if ($config['enable_initializer']) {
228+
$this->loadInitializer($config, $loader, $container);
229+
}
226230
}
227231

228232
private function loadSonataPhpcrAdmin($config, XmlFileLoader $loader, ContainerBuilder $container)
@@ -236,10 +240,36 @@ private function loadSonataPhpcrAdmin($config, XmlFileLoader $loader, ContainerB
236240

237241
$basePath = $config['admin_basepath'] ?: reset($config['route_basepaths']);
238242
$container->setParameter('cmf_routing.dynamic.persistence.phpcr.admin_basepath', $basePath);
243+
}
239244

240-
if ($config['enable_initializer']) {
241-
$loader->load('initializer-phpcr.xml');
245+
/**
246+
* @param array $config
247+
* @param XmlFileLoader $loader
248+
* @param ContainerBuilder $container
249+
*/
250+
private function loadInitializer($config, XmlFileLoader $loader, ContainerBuilder $container)
251+
{
252+
$adminBasepathParameter = $this->getAlias().'.dynamic.persistence.phpcr.admin_basepath';
253+
254+
$initializedBasepaths = array();
255+
if ($container->hasParameter($adminBasepathParameter)) {
256+
$initializedBasepaths = array($container->getParameter($adminBasepathParameter));
257+
}
258+
259+
if ('auto' === $config['enable_initializer'] && empty($initializedBasepaths)) {
260+
return;
242261
}
262+
263+
if (true === $config['enable_initializer'] && empty($initializedBasepaths)) {
264+
$initializedBasepaths = $container->getParameter($this->getAlias().'.dynamic.persistence.phpcr.route_basepaths');
265+
}
266+
267+
$container->setParameter(
268+
$this->getAlias().'.dynamic.persistence.phpcr.initialized_basepaths',
269+
$initializedBasepaths
270+
);
271+
272+
$loader->load('initializer-phpcr.xml');
243273
}
244274

245275
private function loadOrmProvider($config, XmlFileLoader $loader, ContainerBuilder $container, $matchImplicitLocale)

DependencyInjection/Configuration.php

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,26 @@ private function addDynamicSection(ArrayNodeDefinition $root)
142142
->end()
143143
->values(array(true, false, 'auto'))
144144
->defaultValue('auto')
145-
->end() // use_sonata_admin
146-
->booleanNode('enable_initializer')->defaultTrue()->end()
145+
->end()
146+
->enumNode('enable_initializer')
147+
->beforeNormalization()
148+
->ifString()
149+
->then(function ($v) {
150+
switch ($v) {
151+
case 'true':
152+
return true;
153+
154+
case 'false':
155+
return false;
156+
157+
default:
158+
return $v;
159+
}
160+
})
161+
->end()
162+
->values(array(true, false, 'auto'))
163+
->defaultValue('auto')
164+
->end()
147165
->end()
148166
->end() // phpcr
149167
->arrayNode('orm')

Resources/config/initializer-phpcr.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88

99
<service id="cmf_routing.initializer" class="Doctrine\Bundle\PHPCRBundle\Initializer\GenericInitializer">
1010
<argument>CmfRoutingBundle</argument>
11-
<argument type="collection">
12-
<argument>%cmf_routing.dynamic.persistence.phpcr.admin_basepath%</argument>
13-
</argument>
11+
<argument>%cmf_routing.dynamic.persistence.phpcr.initialized_basepaths%</argument>
1412
<tag name="doctrine_phpcr.initializer"/>
1513
</service>
1614

Tests/Unit/DependencyInjection/CmfRoutingExtensionTest.php

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,6 @@ public function testInitializerDisabled()
300300
'kernel.bundles',
301301
array(
302302
'CmfRoutingBundle' => true,
303-
'SonataDoctrinePHPCRAdminBundle' => true,
304303
)
305304
);
306305

@@ -310,7 +309,6 @@ public function testInitializerDisabled()
310309
'persistence' => array(
311310
'phpcr' => array(
312311
'enabled' => true,
313-
'use_sonata_admin' => true,
314312
'enable_initializer' => false,
315313
),
316314
),
@@ -320,7 +318,7 @@ public function testInitializerDisabled()
320318
$this->assertFalse($this->container->has('cmf_routing.initializer'));
321319
}
322320

323-
public function testInitializerDisabledWithoutSonata()
321+
public function testInitializerEnabledEvenWithoutSonata()
324322
{
325323
$this->load(array(
326324
'dynamic' => array(
@@ -329,11 +327,56 @@ public function testInitializerDisabledWithoutSonata()
329327
'phpcr' => array(
330328
'enabled' => true,
331329
'use_sonata_admin' => false,
330+
'enable_initializer' => true,
332331
),
333332
),
334333
),
335334
));
336335

336+
$this->assertTrue($this->container->has('cmf_routing.initializer'));
337+
}
338+
339+
public function testInitializerEnabledAutomaticallyIfSonataIsEnabled()
340+
{
341+
$this->container->setParameter(
342+
'kernel.bundles',
343+
array(
344+
'CmfRoutingBundle' => true,
345+
'SonataDoctrinePHPCRAdminBundle' => true,
346+
)
347+
);
348+
349+
$this->load(array(
350+
'dynamic' => array(
351+
'enabled' => true,
352+
'persistence' => array(
353+
'phpcr' => array(
354+
'enabled' => true,
355+
'use_sonata_admin' => true,
356+
'enable_initializer' => 'auto',
357+
),
358+
),
359+
),
360+
));
361+
362+
$this->assertTrue($this->container->has('cmf_routing.initializer'));
363+
}
364+
365+
public function testInitializerDisabledAutomaticallyIfSonataIsDisabled()
366+
{
367+
$this->load(array(
368+
'dynamic' => array(
369+
'enabled' => true,
370+
'persistence' => array(
371+
'phpcr' => array(
372+
'enabled' => true,
373+
'use_sonata_admin' => false,
374+
'enable_initializer' => 'auto',
375+
),
376+
),
377+
),
378+
));
379+
337380
$this->assertFalse($this->container->has('cmf_routing.initializer'));
338381
}
339382
}

0 commit comments

Comments
 (0)