[HttpKernel] deprecated bundle inheritance
This commit is contained in:
parent
ee9f4c3dad
commit
89893c1204
@ -173,6 +173,8 @@ FrameworkBundle
|
|||||||
HttpKernel
|
HttpKernel
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
* Bundle inheritance has been deprecated.
|
||||||
|
|
||||||
* Relying on convention-based commands discovery has been deprecated and
|
* Relying on convention-based commands discovery has been deprecated and
|
||||||
won't be supported in 4.0. Use PSR-4 based service discovery instead.
|
won't be supported in 4.0. Use PSR-4 based service discovery instead.
|
||||||
|
|
||||||
|
@ -493,6 +493,8 @@ HttpFoundation
|
|||||||
HttpKernel
|
HttpKernel
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
* Bundle inheritance has been removed.
|
||||||
|
|
||||||
* Relying on convention-based commands discovery is not supported anymore.
|
* Relying on convention-based commands discovery is not supported anymore.
|
||||||
Use PSR-4 based service discovery instead.
|
Use PSR-4 based service discovery instead.
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ class ControllerNameParser
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// this throws an exception if there is no such bundle
|
// this throws an exception if there is no such bundle
|
||||||
$allBundles = $this->kernel->getBundle($bundle, false);
|
$allBundles = $this->kernel->getBundle($bundle, false, true);
|
||||||
} catch (\InvalidArgumentException $e) {
|
} catch (\InvalidArgumentException $e) {
|
||||||
$message = sprintf(
|
$message = sprintf(
|
||||||
'The "%s" (from the _controller value "%s") does not exist or is not enabled in your kernel!',
|
'The "%s" (from the _controller value "%s") does not exist or is not enabled in your kernel!',
|
||||||
@ -141,7 +141,7 @@ class ControllerNameParser
|
|||||||
}
|
}
|
||||||
|
|
||||||
$lev = levenshtein($nonExistentBundleName, $bundleName);
|
$lev = levenshtein($nonExistentBundleName, $bundleName);
|
||||||
if ($lev <= strlen($nonExistentBundleName) / 3 && ($alternative === null || $lev < $shortest)) {
|
if ($lev <= strlen($nonExistentBundleName) / 3 && (null === $alternative || $lev < $shortest)) {
|
||||||
$alternative = $bundleName;
|
$alternative = $bundleName;
|
||||||
$shortest = $lev;
|
$shortest = $lev;
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,8 @@ interface BundleInterface extends ContainerAwareInterface
|
|||||||
* bundle.
|
* bundle.
|
||||||
*
|
*
|
||||||
* @return string The Bundle name it overrides or null if no parent
|
* @return string The Bundle name it overrides or null if no parent
|
||||||
|
*
|
||||||
|
* @deprecated This method is deprecated as of 3.4 and will be removed in 4.0.
|
||||||
*/
|
*/
|
||||||
public function getParent();
|
public function getParent();
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ CHANGELOG
|
|||||||
3.4.0
|
3.4.0
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
* deprecated bundle inheritance
|
||||||
* added `RebootableInterface` and implemented it in `Kernel`
|
* added `RebootableInterface` and implemented it in `Kernel`
|
||||||
* deprecated commands auto registration
|
* deprecated commands auto registration
|
||||||
* added `AddCacheClearerPass`
|
* added `AddCacheClearerPass`
|
||||||
|
@ -204,8 +204,17 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function getBundle($name, $first = true)
|
public function getBundle($name, $first = true/*, $noDeprecation = false */)
|
||||||
{
|
{
|
||||||
|
$noDeprecation = false;
|
||||||
|
if (func_num_args() >= 3) {
|
||||||
|
$noDeprecation = func_get_arg(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$first && !$noDeprecation) {
|
||||||
|
@trigger_error(sprintf('Passing "false" as the second argument to %s() is deprecated as of 3.4 and will be removed in 4.0.', __METHOD__), E_USER_DEPRECATED);
|
||||||
|
}
|
||||||
|
|
||||||
if (!isset($this->bundleMap[$name])) {
|
if (!isset($this->bundleMap[$name])) {
|
||||||
throw new \InvalidArgumentException(sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() method of your %s.php file?', $name, get_class($this)));
|
throw new \InvalidArgumentException(sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() method of your %s.php file?', $name, get_class($this)));
|
||||||
}
|
}
|
||||||
@ -241,7 +250,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
|
|||||||
$isResource = 0 === strpos($path, 'Resources') && null !== $dir;
|
$isResource = 0 === strpos($path, 'Resources') && null !== $dir;
|
||||||
$overridePath = substr($path, 9);
|
$overridePath = substr($path, 9);
|
||||||
$resourceBundle = null;
|
$resourceBundle = null;
|
||||||
$bundles = $this->getBundle($bundleName, false);
|
$bundles = $this->getBundle($bundleName, false, true);
|
||||||
$files = array();
|
$files = array();
|
||||||
|
|
||||||
foreach ($bundles as $bundle) {
|
foreach ($bundles as $bundle) {
|
||||||
@ -468,6 +477,8 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
|
|||||||
$this->bundles[$name] = $bundle;
|
$this->bundles[$name] = $bundle;
|
||||||
|
|
||||||
if ($parentName = $bundle->getParent()) {
|
if ($parentName = $bundle->getParent()) {
|
||||||
|
@trigger_error('Bundle inheritance is deprecated as of 3.4 and will be removed in 4.0.', E_USER_DEPRECATED);
|
||||||
|
|
||||||
if (isset($directChildren[$parentName])) {
|
if (isset($directChildren[$parentName])) {
|
||||||
throw new \LogicException(sprintf('Bundle "%s" is directly extended by two bundles "%s" and "%s".', $parentName, $name, $directChildren[$parentName]));
|
throw new \LogicException(sprintf('Bundle "%s" is directly extended by two bundles "%s" and "%s".', $parentName, $name, $directChildren[$parentName]));
|
||||||
}
|
}
|
||||||
|
@ -60,6 +60,9 @@ interface KernelInterface extends HttpKernelInterface, \Serializable
|
|||||||
/**
|
/**
|
||||||
* Returns a bundle and optionally its descendants by its name.
|
* Returns a bundle and optionally its descendants by its name.
|
||||||
*
|
*
|
||||||
|
* The second argument is deprecated as of 3.4 and will be removed in 4.0. This method
|
||||||
|
* will always return an instance of BundleInterface in 4.0.
|
||||||
|
*
|
||||||
* @param string $name Bundle name
|
* @param string $name Bundle name
|
||||||
* @param bool $first Whether to return the first bundle only or together with its descendants
|
* @param bool $first Whether to return the first bundle only or together with its descendants
|
||||||
*
|
*
|
||||||
|
@ -410,6 +410,9 @@ EOF;
|
|||||||
$this->assertEquals(__DIR__.'/Fixtures/Bundle1Bundle/foo.txt', $kernel->locateResource('@Bundle1Bundle/foo.txt'));
|
$this->assertEquals(__DIR__.'/Fixtures/Bundle1Bundle/foo.txt', $kernel->locateResource('@Bundle1Bundle/foo.txt'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
public function testLocateResourceReturnsTheFirstThatMatchesWithParent()
|
public function testLocateResourceReturnsTheFirstThatMatchesWithParent()
|
||||||
{
|
{
|
||||||
$parent = $this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle');
|
$parent = $this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle');
|
||||||
@ -426,6 +429,9 @@ EOF;
|
|||||||
$this->assertEquals(__DIR__.'/Fixtures/Bundle1Bundle/bar.txt', $kernel->locateResource('@ParentAABundle/bar.txt'));
|
$this->assertEquals(__DIR__.'/Fixtures/Bundle1Bundle/bar.txt', $kernel->locateResource('@ParentAABundle/bar.txt'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
public function testLocateResourceReturnsAllMatches()
|
public function testLocateResourceReturnsAllMatches()
|
||||||
{
|
{
|
||||||
$parent = $this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle');
|
$parent = $this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle');
|
||||||
@ -444,6 +450,9 @@ EOF;
|
|||||||
$kernel->locateResource('@Bundle1Bundle/foo.txt', null, false));
|
$kernel->locateResource('@Bundle1Bundle/foo.txt', null, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
public function testLocateResourceReturnsAllMatchesBis()
|
public function testLocateResourceReturnsAllMatchesBis()
|
||||||
{
|
{
|
||||||
$kernel = $this->getKernel(array('getBundle'));
|
$kernel = $this->getKernel(array('getBundle'));
|
||||||
@ -492,6 +501,9 @@ EOF;
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
public function testLocateResourceReturnsTheDirOneForResourcesAndBundleOnes()
|
public function testLocateResourceReturnsTheDirOneForResourcesAndBundleOnes()
|
||||||
{
|
{
|
||||||
$kernel = $this->getKernel(array('getBundle'));
|
$kernel = $this->getKernel(array('getBundle'));
|
||||||
@ -508,6 +520,9 @@ EOF;
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
public function testLocateResourceOverrideBundleAndResourcesFolders()
|
public function testLocateResourceOverrideBundleAndResourcesFolders()
|
||||||
{
|
{
|
||||||
$parent = $this->getBundle(__DIR__.'/Fixtures/BaseBundle', null, 'BaseBundle', 'BaseBundle');
|
$parent = $this->getBundle(__DIR__.'/Fixtures/BaseBundle', null, 'BaseBundle', 'BaseBundle');
|
||||||
@ -581,6 +596,9 @@ EOF;
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
public function testInitializeBundles()
|
public function testInitializeBundles()
|
||||||
{
|
{
|
||||||
$parent = $this->getBundle(null, null, 'ParentABundle');
|
$parent = $this->getBundle(null, null, 'ParentABundle');
|
||||||
@ -599,6 +617,9 @@ EOF;
|
|||||||
$this->assertEquals(array($child, $parent), $map['ParentABundle']);
|
$this->assertEquals(array($child, $parent), $map['ParentABundle']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
public function testInitializeBundlesSupportInheritanceCascade()
|
public function testInitializeBundlesSupportInheritanceCascade()
|
||||||
{
|
{
|
||||||
$grandparent = $this->getBundle(null, null, 'GrandParentBBundle');
|
$grandparent = $this->getBundle(null, null, 'GrandParentBBundle');
|
||||||
@ -621,6 +642,7 @@ EOF;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @group legacy
|
||||||
* @expectedException \LogicException
|
* @expectedException \LogicException
|
||||||
* @expectedExceptionMessage Bundle "ChildCBundle" extends bundle "FooBar", which is not registered.
|
* @expectedExceptionMessage Bundle "ChildCBundle" extends bundle "FooBar", which is not registered.
|
||||||
*/
|
*/
|
||||||
@ -631,6 +653,9 @@ EOF;
|
|||||||
$kernel->boot();
|
$kernel->boot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
public function testInitializeBundlesSupportsArbitraryBundleRegistrationOrder()
|
public function testInitializeBundlesSupportsArbitraryBundleRegistrationOrder()
|
||||||
{
|
{
|
||||||
$grandparent = $this->getBundle(null, null, 'GrandParentCBundle');
|
$grandparent = $this->getBundle(null, null, 'GrandParentCBundle');
|
||||||
@ -653,6 +678,7 @@ EOF;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @group legacy
|
||||||
* @expectedException \LogicException
|
* @expectedException \LogicException
|
||||||
* @expectedExceptionMessage Bundle "ParentCBundle" is directly extended by two bundles "ChildC2Bundle" and "ChildC1Bundle".
|
* @expectedExceptionMessage Bundle "ParentCBundle" is directly extended by two bundles "ChildC2Bundle" and "ChildC1Bundle".
|
||||||
*/
|
*/
|
||||||
@ -667,6 +693,7 @@ EOF;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @group legacy
|
||||||
* @expectedException \LogicException
|
* @expectedException \LogicException
|
||||||
* @expectedExceptionMessage Trying to register two bundles with the same name "DuplicateName"
|
* @expectedExceptionMessage Trying to register two bundles with the same name "DuplicateName"
|
||||||
*/
|
*/
|
||||||
@ -680,6 +707,7 @@ EOF;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @group legacy
|
||||||
* @expectedException \LogicException
|
* @expectedException \LogicException
|
||||||
* @expectedExceptionMessage Bundle "CircularRefBundle" can not extend itself.
|
* @expectedExceptionMessage Bundle "CircularRefBundle" can not extend itself.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user