如何删除Bundle
1.在AppKernel中解除bundle的注册 ¶
要从框架中删除一个bundle,你应该从AppKernel::registerBundles()
方法中移除它。这个bundle一般会在$bundle
数组声明中被找到,或者在底下的“仅用于开发环境”的声明中找到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// app/AppKernel.PHP
// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
new Acme\DemoBundle\AcmeDemoBundle(),
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
// comment or remove this line: / 注释掉或移除此行
// $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
// ...
}
}
} |
2.移除Bundle的路由配置 ¶
现在Symfony已经不知道有这个bundle,你需要删除在app/config
目录下指向该bundle的任何配置信息和路由配置。
2.1 删除Bundle的路由 ¶
有些bundle需要你导入路由信息。在app/config/routing.yml
和app/config/routing_dev.yml
中检查对该bundle的(路由)引用。如果找到任何引用,直接删除。
2.2 删除Bundle的配置 ¶
有些bundle在app/config/config*.yml
文件中包含配置信息。确保从这些文件中移除相关信息。通过在配置文件中查找一个acme_demo
字符串(或bundle的任何假名,比如FOSUserBundle的fos_user
),你可以快速定位到该bundle的配置所在。
3.从文件系统中删除Bundle ¶
现在你已经在程序中移除了对该bundle的每一个引用,可以把bundle从文件系统删除掉了。bundle位于src/Acme/DemoBundle
目录。你应该删除此目录,已经任何“变为空的”之父目录(如,src/Acme/
)
如果你不知道该bundle的位置,可以使用getPath()
方法来获取bundle路径:
1 2 |
dump($this->container->get('kernel')->getBundle('AcmeDemoBundle')->getPath());
die(); |
3.1 删除Bundle的Assets ¶
在web/目录下删除该bundle的资源(如,对于AcmeDemoBundle来说是web/bundles/acmedemo
)。
4.移除其他Bundle中的整合 ¶
有些bundle依赖于其他bundles,如果你删除了一两个,其余的可能难以运行。确保没有其他bundle,三方的或自己的,依赖于你即将删除的bundle。
如果一个bundle依赖于另一个,多数情况下这意味着它用到了那个bundle的一些服务。搜索bundle的假名字符串可能会帮助你找到他们(如,对于依赖AcmeDemoBundle的bundles来说要去搜索acme_demo
。)