如何在SonataUserBundle中重命名命名空间应用程序?

时间:2015-01-08 18:46:49

标签: php symfony sonata-admin

我的作曲家档案:

    "php": ">=5.3.3",
    "symfony/symfony": "2.6.*",
    "doctrine/orm": "~2.2,>=2.2.3",
    "doctrine/doctrine-bundle": "~1.2",
    "twig/extensions": "~1.0",
    "symfony/assetic-bundle": "~2.3",
    "symfony/swiftmailer-bundle": "~2.3",
    "symfony/monolog-bundle": "~2.4",
    "sensio/distribution-bundle": "~3.0",
    "sensio/framework-extra-bundle": "~3.0",
    "incenteev/composer-parameter-handler": "~2.0",
    "friendsofsymfony/user-bundle": "1.3.3",
    "sonata-project/core-bundle": "2.3.*@dev",
    "sonata-project/admin-bundle": "2.4.*@dev",
    "sonata-project/doctrine-orm-admin-bundle" : "*",
    "sonata-project/easy-extends-bundle": "2.1.*@dev",
    "sonata-project/user-bundle": "~2.2",
    "knplabs/knp-menu-bundle": "~1.1",
    "hwi/oauth-bundle": "~0.4@dev",
    "sonata-project/cache-bundle": "~2.2"

如果我使用" php app / console sonata:easy-extends:generate -d src / SonataUserBundle" - 命令生成命名空间"应用程序",命名空间中的所有捆绑包" WPE" ... 我想在我的命名空间中使用用户包。

用户实体已重命名为" WPE \ UserBundle \ Entity \ User",login,admin all work,但 sonata中的用户列表发送错误" Class Application \ Sonata \ UserBundle \ Entity \ User不存在"

我发现(在路径中查找...在IDE PhpStorm中)" Application \ Sonata \ UserBundle"在缓存文件和奏鸣曲文档中。

我如何使用我的命名空间" WPE"?

3 个答案:

答案 0 :(得分:3)

  1. Application\Sonata\UserBundle重命名为YourVendor\UserBundle\Entity\User
  2. 在所有文件中将Application\Sonata\UserBundle...名称空间重命名为YourVendor\UserBundle\...
  3. Application\Sonata\UserBundle\ApplicationSonataUserBundle()移除新Appkernel.php并在YourVendor\UserBundle()中添加AppKernel.php
  4. 更改配置:

    sonata_user:
         #security_acl: true # Uncomment for ACL support
         manager_type: orm # can be orm or mongodb
         class:
            user:               YourVendor\UserBundle\Entity\User
            group:              YourVendor\UserBundle\Entity\Group
    fos_user:
         db_driver:  orm # can be orm or odm
         firewall_name:  main
         user_class:  YourVendor\UserBundle\Entity\User
         #user_class: Application\Sonata\UserBundle\Entity\User
         group:
           group_class:  YourVendor\UserBundle\Entity\Group
           #group_class: Application\Sonata\UserBundle\Entity\Group
           group_manager: sonata.user.orm.group_manager
         service:
           user_manager: sonata.user.orm.user_manager
    
  5. 如果您正在使用orm映射:

    mappings:
         YourVendorUserBundle: ~
         #ApplicationSonataUserBundle: ~
    

答案 1 :(得分:0)

解决此问题的一种常用方法

解决此问题的最简单方法是在VB中使用全局命名空间,全局命名空间是唯一允许的Application\YourBundle\Entity命名空间。

因此,在映射定义内部或VB代码内部,您将使用一个最终命名空间:问题已解决。如何做到这一点:

在VB中只声明SuperClass,不要使用final实体, 调用您的实体BaseXXXX并使其成为抽象,将属性从private更改为protected, 存储库也是如此, 始终在代码中使用Application\YourBundle\Entity\XXXX。 当然,您需要为每个VB包创建:

Application目录中的有效结构, 有效的实体映射定义, 实体文件夹中的模型。 如果没有为您生成这种结构的有效工具,最后一部分是非常低效的:EasyExtendsBundle拯救。

如何使您的捆绑轻松可扩展?

主要是您需要遵循前一段中的说明:

如上所述声明您的实体/存储库, 如上所述使用您的实体/存储库, 在生成之前,您还需要描述AB实体的“骨架”文件。骨架文件可以是xml或yml。有关完整工作示例,请参阅SonataMediaBundle。 最后你可以运行:

php app/console sonata:easy-extends:generate YourVBBundleName

请注意,–dest选项允许您选择目标目录,例如src。默认目的地为app/

答案 2 :(得分:0)

如果您想使用:

php app/console sonata:easy-extends:generate YourVBBundleName

你可以修改一些SonataAdmin fiels,这不是最好的方法,但它可以帮助你至少运行命令并生成你的包:

1 - 在Sonata \ EasyExtendsBundle \ Bundle \ BundleMetadata(ligne 95)中进行如下更改:

 $this->extendedNamespace = sprintf('WPE\\%s\\%s', $this->vendor, $information[1]);

2 - 在Sonata \ EasyExtendsBundle \ Command \ GenerateCommand(ligne 67)中:

            'application_dir' =>  sprintf("%s/WPE", $dest)

3 - 在Sonata \ EasyExtendsBundle \ Generator \ BundleGenerator(ligne 70)中:

        $file = sprintf('%s/WPE%s.php', $bundleMetadata->getExtendedDirectory(), $bundleMetadata->getName());

4 - 在sonata-project / Resources / skeleton / bundle / bundle.mustache:

class WPE{{ bundle }} extends Bundle
{
 /.../
}

5 - 在Sonata \ UserBundle \ DependencyInjection \ SonataUserExtension(ligne 162/163)中:

 $defaultConfig['class']['user']  = sprintf('WPE\\Sonata\\UserBundle\\%s\\User', $modelType);

 $defaultConfig['class']['group'] = sprintf('WPE\\Sonata\\UserBundle\\%s\\Group', $modelType);

然后运行php app / console sonata:easy-extends:generate。

其他方式您可以在WPE下复制UserBundle并进行更改:

在config.yml

您的名字空间

您的实体

您的服务

和您的班级管理员