我正在使用Symfony 2.6
我的主捆绑包是AppBundle,所以捆绑包中的所有名称空间看起来都是这样的:
AppBundle''DirectoryName
我想更改所有的名称空间,这样我就可以得到这样的东西:
MyCompanyName''ProjectName''AppBundle''DirectoryName
=============================================
下一段文字显示了我所尝试的内容和我所犯的错误。
我有StringUtilities类:
<?php
namespace MyCompanyName'ProjectName'AppBundle'Utility;
class StringUtilities {
}
我在这里使用StringUtilities:
<?php
namespace AppBundle'Auth;
use MyCompanyName'ProjectName'AppBundle'Utility'StringUtilities as SU;
class UserChecker extends 'Symfony'Component'Security'Core'User'UserChecker {
}
当运行应用程序时,我得到了这个错误:
尝试从命名空间加载类"StringUtilities"MyCompanyName''ProjectName''AppBundle''Utility"。你忘了用了吗另一个命名空间的语句?
这可以通过在app/autoload.php 中添加此行来解决
$loader->addPsr4('MyCompanyName'ProjectName''', realpath(__DIR__.'/../src'));
现在我尝试更改UseChecker类的名称空间:
<?php
namespace MyCompanyName'ProjectName'AppBundle'Auth;
use MyCompanyName'ProjectName'AppBundle'Utility'StringUtilities as SU;
class UserChecker extends 'Symfony'Component'Security'Core'User'UserChecker {
}
当我试图通过控制台清除缓存时(php app/console cache:clear(,我会得到以下错误:
[运行时异常]
自动加载器需要类"AppBundle''Auth''UserChecker"在文件中定义"/home/damjan/Temp/licence-management/src/AppBundle/Auth/UserChecker.php"。文件已找到,但类不在其中,类名或命名空间可能有拼写错误。
当在浏览器中运行应用程序时,我会收到以下错误:
UserChecker.php第0行中的FatalErrorException:编译错误:无法重新声明类MyCompanyName''ProjectName''AppBundle''Auth''UserChecker
在composer中更改自动加载,然后运行composer dump-autoload
。
在那之后,更改您的命名空间捆绑包和AppKernel,并感到高兴。
我想绕过Sumfony规则并不是那么容易和干净:
bundle目录结构用作命名空间层次结构。
所以我决定也重命名appBundle。以下是我所做的:
- 我在src中制作了子文件夹,并将其命名为CCD_
- 在其中,我移动了AppBundle文件夹并将其重命名为
ProjectNameBundle
- Than我用find replace来更改所有命名空间
AppBundle->MyCompanyName''ProjectNameBundle
更改时要小心,因为单词AppBundle并不总是在类路径(命名空间(中,它也可能是目录路径的一部分。例如,在config.yml中,我进行了以下更改:
我改了这个:
orm:
mappings:
CompanyManagementBundle:
type: annotation
dir: %kernel.root_dir%/../src/AppBundle/Entity
prefix: AppBundle'Entity
alias: AppBundle
进入:
orm:
mappings:
CompanyManagementBundle:
type: annotation
dir: %kernel.root_dir%/../src/MyCompanyName/ProjectNameBundle/Entity
prefix: MyCompanyName'ProjectNameBundle'Entity
alias: ProjectNameBundle
在routing.yml中,我更改了这个:
app:
resource: "@AppBundle/Controller/"
type: annotation
进入:
company_management:
resource: "@ProjectNameBundle/Controller/"
type: annotation
重点是:重命名时要小心。