如何在 SonataUserBundle 中重命名命名空间应用程序?
How rename namespace Application in SonataUserBundle?
我的作曲家文件:
"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" - 命令生成命名空间 "Application",我所有的 Bundle 都在命名空间 "WPE" 中...
我想要我的命名空间中的用户包。
用户实体重命名为 "WPE\UserBundle\Entity\User"、登录、管理员都可以,但是
奏鸣曲中的用户列表发送错误"Class Application\Sonata\UserBundle\Entity\User does not exist"
我在缓存文件和奏鸣曲文档中找到(在路径中查找...在 IDE PhpStorm 中)"Application\Sonata\UserBundle"。
如何使用我的命名空间 "WPE"?
解决这个问题的实用方法
解决此问题的最简单方法是在 VB 中使用全局命名空间,全局命名空间是唯一允许的命名空间 Application\YourBundle\Entity
.
因此,在您的映射定义或 VB 代码中,您将使用一个最终命名空间:问题已解决。如何实现:
仅在 VB 中声明超类,不要使用最终实体,
调用您的实体 BaseXXXX 并将其抽象化,将属性从私有更改为受保护,
存储库也是如此,
始终在代码中使用 Application\YourBundle\Entity\XXXX
。
当然,您需要为每个 VB 包创建:
Application 目录中的有效结构,
一个有效的实体映射定义,
实体文件夹中的模型。
如果没有有效的工具为您生成此结构,最后一部分是非常低效的:EasyExtendsBundle 来拯救。
如何使您的捆绑包易于扩展?
主要是您需要按照上一段中的说明进行操作:
声明你 entity/repository 如上所述,
如上所述使用您的 entity/repository,
在生成之前,您还需要描述 AB 实体的“骨架”文件。骨架文件可以是 xml 或 yml。有关完整的工作示例,请参阅 SonataMediaBundle。
最后你可以 运行:
php app/console sonata:easy-extends:generate YourVBBundleName
请注意,–dest
选项允许您选择目标目录,例如 src。默认目标是 app/
.
如果你想使用:
php app/console sonata:easy-extends:generate YourVBBundleName
您可以修改一些 SonataAdmin 字段,这不是最好的方法,但可以帮助您 运行 至少命令并生成您的包:
1 - 在 Sonata\EasyExtendsBundle\Bundle\BundleMetadata (ligne 95) 中进行如下更改:
$this->extendedNamespace = sprintf('WPE\%s\%s', $this->vendor, $information[1]);
2 - 在 Sonata\EasyExtendsBundle\Command\GenerateCommand(第 67 行)中:
'application_dir' => sprintf("%s/WPE", $dest)
3 - 在 Sonata\EasyExtendsBundle\Generator\BundleGenerator(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(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
你的名字空间
你们实体
您的服务
和您的 class 管理员
- 将
Application\Sonata\UserBundle
重命名为您的 YourVendor\UserBundle\Entity\User
。
- 将所有文件中的
Application\Sonata\UserBundle...
命名空间重命名为 YourVendor\UserBundle\...
。
- 从
Appkernel.php
中删除新的 Application\Sonata\UserBundle\ApplicationSonataUserBundle()
并在 AppKernel.php
中添加 YourVendor\UserBundle()
。
更改配置:
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
如果您使用的是 orm 映射:
mappings:
YourVendorUserBundle: ~
#ApplicationSonataUserBundle: ~
我的作曲家文件:
"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" - 命令生成命名空间 "Application",我所有的 Bundle 都在命名空间 "WPE" 中... 我想要我的命名空间中的用户包。
用户实体重命名为 "WPE\UserBundle\Entity\User"、登录、管理员都可以,但是 奏鸣曲中的用户列表发送错误"Class Application\Sonata\UserBundle\Entity\User does not exist"
我在缓存文件和奏鸣曲文档中找到(在路径中查找...在 IDE PhpStorm 中)"Application\Sonata\UserBundle"。
如何使用我的命名空间 "WPE"?
解决这个问题的实用方法
解决此问题的最简单方法是在 VB 中使用全局命名空间,全局命名空间是唯一允许的命名空间 Application\YourBundle\Entity
.
因此,在您的映射定义或 VB 代码中,您将使用一个最终命名空间:问题已解决。如何实现:
仅在 VB 中声明超类,不要使用最终实体,
调用您的实体 BaseXXXX 并将其抽象化,将属性从私有更改为受保护,
存储库也是如此,
始终在代码中使用 Application\YourBundle\Entity\XXXX
。
当然,您需要为每个 VB 包创建:
Application 目录中的有效结构, 一个有效的实体映射定义, 实体文件夹中的模型。 如果没有有效的工具为您生成此结构,最后一部分是非常低效的:EasyExtendsBundle 来拯救。
如何使您的捆绑包易于扩展?
主要是您需要按照上一段中的说明进行操作:
声明你 entity/repository 如上所述, 如上所述使用您的 entity/repository, 在生成之前,您还需要描述 AB 实体的“骨架”文件。骨架文件可以是 xml 或 yml。有关完整的工作示例,请参阅 SonataMediaBundle。 最后你可以 运行:
php app/console sonata:easy-extends:generate YourVBBundleName
请注意,–dest
选项允许您选择目标目录,例如 src。默认目标是 app/
.
如果你想使用:
php app/console sonata:easy-extends:generate YourVBBundleName
您可以修改一些 SonataAdmin 字段,这不是最好的方法,但可以帮助您 运行 至少命令并生成您的包:
1 - 在 Sonata\EasyExtendsBundle\Bundle\BundleMetadata (ligne 95) 中进行如下更改:
$this->extendedNamespace = sprintf('WPE\%s\%s', $this->vendor, $information[1]);
2 - 在 Sonata\EasyExtendsBundle\Command\GenerateCommand(第 67 行)中:
'application_dir' => sprintf("%s/WPE", $dest)
3 - 在 Sonata\EasyExtendsBundle\Generator\BundleGenerator(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(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
你的名字空间
你们实体
您的服务
和您的 class 管理员
- 将
Application\Sonata\UserBundle
重命名为您的YourVendor\UserBundle\Entity\User
。 - 将所有文件中的
Application\Sonata\UserBundle...
命名空间重命名为YourVendor\UserBundle\...
。 - 从
Appkernel.php
中删除新的Application\Sonata\UserBundle\ApplicationSonataUserBundle()
并在AppKernel.php
中添加YourVendor\UserBundle()
。 更改配置:
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
如果您使用的是 orm 映射:
mappings: YourVendorUserBundle: ~ #ApplicationSonataUserBundle: ~