Skip to content

Commit 2968dc2

Browse files
committed
[HttpKernel] Added support for registering Bundle dependencies
1 parent eafdb8c commit 2968dc2

File tree

3 files changed

+99
-0
lines changed

3 files changed

+99
-0
lines changed

cookbook/bundles/dependencies.rst

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
.. index::
2+
single: Bundle; Dependencies
3+
4+
How to Use Bundle Dependencies to Load other Bundles
5+
====================================================
6+
7+
.. versionadded:: 2.8
8+
Support for bundle dependencies was introduced in Symfony 2.8.
9+
10+
When working on your own bundle(s), you'll sometimes have the need to reuse
11+
other bundles, either by just requiring, overriding or inheriting from them.
12+
13+
While Composer takes care about making sure these dependencies are loaded,
14+
you'll also need to enable these bundles in the kernel.
15+
16+
If your bundle is meant to be reused, bundle dependencies will complicate
17+
your installation documentation. This makes installation and upgrading your
18+
bundle more tedious for your users.
19+
20+
You can avoid this by specifying your dependencies. This will make sure that
21+
they are loaded in the kernel. It'll also make sure they are loaded *before*
22+
your own bundle, to make sure you can extend them.
23+
24+
Additional use case for this is for distribution bundles, where one
25+
bundle is in fact bundling several others.
26+
27+
Specifying Dependencies
28+
-----------------------
29+
30+
Dependencies are specified using FQN_ (`Fully Qualified Name`) for the bundle class in
31+
same format as PHP uses for :phpfunction:`get_class`, and for class_ constant introduced in PHP 5.5.
32+
33+
This implies you can only specify bundles that does not take arguments in it's constructor.
34+
This is in-line with Symfony best practice, avoids same bundle being loaded several times,
35+
and allows this information to be easily cached in future versions of Symfony.
36+
37+
Specifying dependencies is accomplished by implementing the
38+
:class:`Symfony\\Component\\HttpKernel\\Bundle\\BundleDependenciesInterface`::
39+
40+
// src/CacheBundle/CacheBundle.php
41+
namespace CacheBundle;
42+
43+
use Symfony\Component\HttpKernel\Bundle\Bundle;
44+
use Symfony\Component\HttpKernel\Bundle\BundleDependenciesInterface;
45+
46+
class CacheBundle extends Bundle implements BundleDependenciesInterface
47+
{
48+
public function getBundleDependencies($environment, $debug)
49+
{
50+
return array('FOS\HttpCacheBundle\FOSHttpCacheBundle' => self::DEP_REQUIRED);
51+
}
52+
}
53+
54+
.. tip::
55+
56+
If your bundle requires PHP 5.5 or higher, you can also take advantage of
57+
the ``class`` constant::
58+
59+
use FOS\HttpCacheBundle\FOSHttpCacheBundle;
60+
61+
// ...
62+
public function getBundleDependencies($environment, $debug)
63+
{
64+
return array(FOSHttpCacheBundle::class => self::DEP_REQUIRED);
65+
}
66+
67+
.. tip::
68+
69+
If your dependency is only to be loaded in ``dev`` or when debugging, use the provided arguments::
70+
71+
use Egulias\SecurityDebugCommandBundle\EguliasSecurityDebugCommandBundle;
72+
73+
// ...
74+
public function getBundleDependencies($environment, $debug)
75+
{
76+
if ($environment !== 'dev') {
77+
return array();
78+
}
79+
80+
return array('Egulias\SecurityDebugCommandBundle\EguliasSecurityDebugCommandBundle' => self::DEP_REQUIRED);
81+
}
82+
83+
84+
Specifying Optional Dependencies
85+
--------------------------------
86+
87+
Specifying a optional dependency follows the same format but with a different constant::
88+
89+
// ...
90+
public function getBundleDependencies($environment, $debug)
91+
{
92+
return array('Oneup\FlysystemBundle\OneupFlysystemBundle' => self::DEP_OPTIONAL);
93+
}
94+
95+
96+
.. _FQN: https://en.wikipedia.org/wiki/Fully_qualified_name
97+
.. _class: http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class.class

cookbook/bundles/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Bundles
77
installation
88
best_practices
99
inheritance
10+
dependencies
1011
override
1112
remove
1213
extension

cookbook/map.rst.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
* :doc:`/cookbook/bundles/installation`
1313
* :doc:`/cookbook/bundles/best_practices`
1414
* :doc:`/cookbook/bundles/inheritance`
15+
* :doc:`/cookbook/bundles/dependencies`
1516
* :doc:`/cookbook/bundles/override`
1617
* :doc:`/cookbook/bundles/remove`
1718
* :doc:`/cookbook/bundles/extension`

0 commit comments

Comments
 (0)