如何删除Bundle

3.4 版本
维护中的版本

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.ymlapp/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。)

如果一个三方bundle要依赖另一个bundle,你可以在三方bundle目录下的composer.json文件中找到“被依赖bundle”。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)