Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php FOSUserBundle覆盖角色-属性“;角色“;在;Acme\DemoBundle\Entity\User“;已声明,但只能声明一次_Php_Symfony_Doctrine Orm_Fosuserbundle_Symfony 2.4 - Fatal编程技术网

Php FOSUserBundle覆盖角色-属性“;角色“;在;Acme\DemoBundle\Entity\User“;已声明,但只能声明一次

Php FOSUserBundle覆盖角色-属性“;角色“;在;Acme\DemoBundle\Entity\User“;已声明,但只能声明一次,php,symfony,doctrine-orm,fosuserbundle,symfony-2.4,Php,Symfony,Doctrine Orm,Fosuserbundle,Symfony 2.4,我喜欢大多数人都试图覆盖FOSUserBundle角色,这样我就可以将它们很多映射到一个角色实体 不幸的是,由于模型/用户的映射,我得到以下结果: Property "roles" in "Acme\DemoBundle\Entity\User" was already declared, but it must be declared only once FOSUserBundle上发布的这期git中似乎提到了一些解决方法: 我正在使用ORM和注释进行映射,而不是yml或xml。最新Sym

我喜欢大多数人都试图覆盖FOSUserBundle角色,这样我就可以将它们很多映射到一个角色实体

不幸的是,由于模型/用户的映射,我得到以下结果:

Property "roles" in "Acme\DemoBundle\Entity\User" was already declared, but it must be declared only once
FOSUserBundle上发布的这期git中似乎提到了一些解决方法:

我正在使用ORM和注释进行映射,而不是yml或xml。最新Symfony(2.4)和最新FOSUB

我尝试了另一种选择,将所有内容复制到我的实体中,不进行扩展,但老实说,这会把所有内容都搞糟

我正在尝试创建自己的模型/用户,扩展FOSUserBundle/Model/User,而不使用映射。然后在此基础上扩展我的实体/用户。我试过了,但还是遇到了同样的问题。我想我做得不对

有人能建议/展示我如何正确地做到这一点吗

我真的需要能够覆盖角色,因为虽然FOSUserBundle很好,但是角色的适应性不是很好。虽然我当时很感激这是他们唯一能做到的方法,但现在改变它就打破了BC

希望有人能帮忙

问候
保罗·庞德(Paul Pounder)

我也有同样的问题,也使用了注释

注意:由于一些读者在整合所有内容时遇到问题,我创建了一个。如果您发现本指南中缺少某些内容,请告诉我,以便我添加它

这篇文章涵盖了三个方面,基于数据库的角色采用树状结构实现,框架配置也支持数据库角色的角色层次结构(getReachableRoles)。没有它,在DB中拥有角色毕竟是无用的。和在持久化的特定实体上创建角色

FOS所做的更改是深刻的,并且有很好的文档记录,但我必须说,一个
如何使用
示例代码会阻止我大量阅读(不是抱怨,至少我现在对编译器过程了解一点)

数据库的角色 我使用的是SF2.4,但从2.3开始就应该可以了。这是我的解决方案涉及的文件,考虑每个文件的一个步骤:

./:
composer.json

src/Application/UsuarioBundle/:
ApplicationUsuarioBundle.php

src/Application/UsuarioBundle/Resources/config/doctrine/model/:
User.orm.xml

src/Application/UsuarioBundle/Entity/:
Role.php  Usuario.php
copmoser.json
中,我升级了条令包,使其包含所需的文件:

"require": {
...
    "doctrine/doctrine-bundle": "~1.3@dev",
...
}
Bundle.php
文件中,必须注册一个编译器过程

namespace Application\UsuarioBundle;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\DoctrineOrmMappingsPass;

class ApplicationUsuarioBundle extends Bundle
{

    public function build(ContainerBuilder $container)
    {
        parent::build($container);
        $mappings = array(
            realpath(__DIR__ . '/Resources/config/doctrine/model') => 'FOS\UserBundle\Model',
            realpath(__DIR__ . '/Resources/config/doctrine/model') => 'FOS\UserBundle\Entity', 
        );

        $container->addCompilerPass(
            DoctrineOrmMappingsPass::createXmlMappingDriver(
                $mappings, array('fos_user.model_manager_name'), false
            )
        );
}
这是新版本的条令包导入的依赖项:

`\Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\DoctrineOrmMappingsPass`. 
我假设这个映射信息是在FOSUerBundle之后添加的,因为我只是重复了我在FOSUerBundle.php中看到的这个过程(仅针对ORM进行了简化),希望它优先于FOSUerBundle

User.orm.xml
中的映射是
/vendor/friendsofsymfony/User bundle/FOS/UserBundle/Resources/config/doctor/model/User.orm.xml
的精确副本,第35行被注释掉。这将删除映射的超类中角色的冲突映射

不过,我并没有表示我需要的角色层次结构

希望对别人有用。我相信你已经解决了这个问题,或者丢掉了工作

我遵循的文件:

https://github.com/symfony/symfony/pull/7599
https://github.com/FriendsOfSymfony/FOSUserBundle/pull/1081
http://symfony.com/doc/2.4/cookbook/doctrine/mapping_model_classes.html
http://symfony.com/doc/current/cookbook/service_container/compiler_passes.html
角色层次结构实现 解决方案中涉及的文件:

// The Magician, for I just re-instantiated RoleHierarchyVoter & ExpressionVoter 
// classes as ApplicationUsuarioBundle services; passing my RoleHierarchy 
// implementation. 
src/Application/UsuarioBundle/Role/RoleHierarchy.php

// duplicating security.access.expression_voter && 
// application_usuario.access.role_hierarchy_voter BUT WITH NEW 
// RoleHierarchy ARGUMENT
src/Application/UsuarioBundle/Resources/config/services.xml

// Entities, important methods are collection related
src/Application/UsuarioBundle/Entity/Role.php
src/Application/UsuarioBundle/Entity/Usuario.php

// Edited, commented out regular hardcoded roleHierarchy
app/config/security.yml

// CRUD related, sample files will add dependencies to lexik/form-filter-bundle; 
// docdigital/filter-type-guesser; white-october/pagerfanta-bundle
src/Application/UsuarioBundle/Controller/RoleController.php
src/Application/UsuarioBundle/Form/RoleType.php
src/Application/UsuarioBundle/Resources/views/Role/edit.html.twig
src/Application/UsuarioBundle/Resources/views/Role/index.html.twig
src/Application/UsuarioBundle/Resources/views/Role/new.html.twig
src/Application/UsuarioBundle/Resources/views/Role/show.html.twig
您可以在中看到文件

或者直接访问每个文件(因为Gist不保留列表顺序)

随后的文档:

// The Magician, for I just re-instantiated RoleHierarchyVoter & ExpressionVoter 
// classes as ApplicationUsuarioBundle services; passing my RoleHierarchy 
// implementation. 
src/Application/UsuarioBundle/Role/RoleHierarchy.php

// duplicating security.access.expression_voter && 
// application_usuario.access.role_hierarchy_voter BUT WITH NEW 
// RoleHierarchy ARGUMENT
src/Application/UsuarioBundle/Resources/config/services.xml

// Entities, important methods are collection related
src/Application/UsuarioBundle/Entity/Role.php
src/Application/UsuarioBundle/Entity/Usuario.php

// Edited, commented out regular hardcoded roleHierarchy
app/config/security.yml

// CRUD related, sample files will add dependencies to lexik/form-filter-bundle; 
// docdigital/filter-type-guesser; white-october/pagerfanta-bundle
src/Application/UsuarioBundle/Controller/RoleController.php
src/Application/UsuarioBundle/Form/RoleType.php
src/Application/UsuarioBundle/Resources/views/Role/edit.html.twig
src/Application/UsuarioBundle/Resources/views/Role/index.html.twig
src/Application/UsuarioBundle/Resources/views/Role/new.html.twig
src/Application/UsuarioBundle/Resources/views/Role/show.html.twig

条令订阅者 你会走到这一步,意识到有些东西不见了

我将角色移植到DB的主要原因是,我正在处理一个动态(从结构角度)应用程序,该应用程序使用户能够配置工作流。当我添加新区域、新流程、新活动(或更新名称或父子关系,或删除任何内容)时,我需要自动生成新角色

然后考虑LyfeCycleeEvents的Doctrine订阅服务器,但是在PrePersist/PreUpdate中添加新实体将需要嵌套刷新,在我的例子中,这会把事情搞砸,当您只需要更新已经“computedChanges”实体上的一些字段时,这会更容易

因此,我用来钩住和创建/编辑/删除角色的是onFlush,此时computChangeSet()可以很好地用于添加新实体


我将以为例。

为什么不使用FOSUserBundle的组功能?不要使用FOS提供的用户包。这将是一个地狱般的旅程。更好地构建您的自定义
提供程序
。很容易实现。我已经在应用程序中使用组来存储公司中的用户,并针对他们应用角色。我仍然需要能够针对特定用户应用角色,而不是对他们进行分组@cept0-我同意,但它非常适合我的需要(除了角色):)可能是我最终使用了组,并改变了我存储公司的方式,但我想我会先调查一下。另外,FOSUserBundle与我正在使用的其他捆绑包集成良好,所以现在不想破坏这一链接。@PaulPounder关于您对FOS用户捆绑包完整性的评论:没有特殊的magic FOS用户捆绑包集成。该捆绑包将自身集成到Symfony中,其他捆绑包可以使用此“桥”。我感谢您对StackOverflow编辑器的坚持。这是一个很好的解决方案。老实说,我还没有解决这个问题,谢天谢地我还在工作:-)谢谢,我很高兴你还在工作。我正在为此实施RoleHierarchyVoter。完成后我会把它添加到答案中。谢谢,非常有用的帖子。但有一个问题。例如,当您想从用户中完全删除$roles时,若您将其存储在单独的数据库中,因为EntityManager从所有父类加载元数据,所以结果将失败,除非不存在此类列的角色
// The Magician, for I just re-instantiated RoleHierarchyVoter & ExpressionVoter 
// classes as ApplicationUsuarioBundle services; passing my RoleHierarchy 
// implementation. 
src/Application/UsuarioBundle/Role/RoleHierarchy.php

// duplicating security.access.expression_voter && 
// application_usuario.access.role_hierarchy_voter BUT WITH NEW 
// RoleHierarchy ARGUMENT
src/Application/UsuarioBundle/Resources/config/services.xml

// Entities, important methods are collection related
src/Application/UsuarioBundle/Entity/Role.php
src/Application/UsuarioBundle/Entity/Usuario.php

// Edited, commented out regular hardcoded roleHierarchy
app/config/security.yml

// CRUD related, sample files will add dependencies to lexik/form-filter-bundle; 
// docdigital/filter-type-guesser; white-october/pagerfanta-bundle
src/Application/UsuarioBundle/Controller/RoleController.php
src/Application/UsuarioBundle/Form/RoleType.php
src/Application/UsuarioBundle/Resources/views/Role/edit.html.twig
src/Application/UsuarioBundle/Resources/views/Role/index.html.twig
src/Application/UsuarioBundle/Resources/views/Role/new.html.twig
src/Application/UsuarioBundle/Resources/views/Role/show.html.twig