[英]How to change namespace in Symfony2
我正在使用Symfony 2.6
我的主要包是AppBundle,所以bundle中的所有命名空间都是这样的:
的appbundle \\目录名
我想更改所有名称空间,以便我最终得到这样的东西:
MyCompanyName \\项目名\\的appbundle \\目录名
================================================== ======
下一个文本显示了我尝试过的内容以及我遇到的错误。
我有类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 {
}
运行应用程序时,我收到此错误:
尝试从命名空间“MyCompanyName \\ ProjectName \\ AppBundle \\ Utility”加载类“StringUtilities”。 您是否忘记了另一个命名空间的“use”语句?
这可以通过在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)时,我收到此错误:
[RuntimeException的]
自动加载器期望类“AppBundle \\ Auth \\ UserChecker”在文件“/home/damjan/Temp/licence-management/src/AppBundle/Auth/UserChecker.php”中定义。 找到该文件但该类不在其中,类名或命名空间可能有拼写错误。
当在浏览器中运行应用程序时,我收到此错误:
UserChecker.php中的FatalErrorException第0行:编译错误:无法重新声明类MyCompanyName \\ ProjectName \\ AppBundle \\ Auth \\ UserChecker
在composer中更改自动加载,然后运行composer dump-autoload
。
之后,更改您的命名空间包和您的AppKernel,并感到高兴。
我想围绕Sumfony规则并不那么容易和干净:
bundle目录结构用作命名空间层次结构。
所以我决定重命名appBundle。 这是我做的:
MyCompanyName
, ProjectNameBundle
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
关键是:重命名时要小心。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.