繁体   English   中英

如何更改Symfony2中的命名空间

[英]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。 这是我做的:

  • 我在src中创建了子文件夹,并将其命名为MyCompanyName
  • 在其中我移动了AppBundle文件夹并将其重命名为ProjectNameBundle
  • 比我使用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

关键是:重命名时要小心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM