我的作曲家档案:
"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"?
答案 0 :(得分:3)
Application\Sonata\UserBundle
重命名为YourVendor\UserBundle\Entity\User
。Application\Sonata\UserBundle...
名称空间重命名为YourVendor\UserBundle\...
。 Application\Sonata\UserBundle\ApplicationSonataUserBundle()
移除新Appkernel.php
并在YourVendor\UserBundle()
中添加AppKernel.php
。更改配置:
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: ~
答案 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
中您的名字空间
您的实体
您的服务
和您的班级管理员