我正在使用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 {
}
运行应用程序时,我收到此错误:
尝试加载类&#34; StringUtilities&#34;从命名空间 &#34; MyCompanyName \项目名\的appbundle \实用&#34 ;.你忘记了&#34;使用&#34; 另一个命名空间的语句?
通过在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的]
自动加载器预期类&#34; AppBundle \ Auth \ UserChecker&#34;成为 在文件中定义 &#34; /home/damjan/Temp/licence-management/src/AppBundle/Auth/UserChecker.php" ;. 找到了该文件,但该类不在其中,类名或 命名空间可能有拼写错误。
在浏览器中运行应用程序时,我收到此错误:
UserChecker.php中的FatalErrorException第0行:编译错误:不能 重新声明类MyCompanyName \ ProjectName \ AppBundle \ Auth \ UserChecker
答案 0 :(得分:2)
在编辑器中更改自动加载,然后运行composer dump-autoload
。
之后更改你的命名空间包和你的AppKernel并且开心。
答案 1 :(得分:1)
我想绕过Sumfony规则并不那么容易和干净:
bundle目录结构用作命名空间层次结构。
所以我决定重命名appBundle。这是我做的:
MyCompanyName
,ProjectNameBundle
AppBundle - &gt; 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
重点是:重命名时要小心。