ZF2、Doctrine ORM、および BjyAuthorize を使用しています。
問題は、ID のメソッド getRoles にログインしたときに空が返されることです。
class User implements UserInterface, ProviderInterface{
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Application\Entity\Role", inversedBy="user")
* @ORM\JoinTable(name="user_role_linker",
* joinColumns={
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="role_id", referencedColumnName="id")
* }
* )
*/
protected $roles;
public function __construct() {
$this->roles = new \Doctrine\Common\Collections\ArrayCollection();
}
public function addRole(\Application\Entity\Role $role) {
$this->roles[] = $role;
return $this;
}
/**
* Remove role
*
* @param \Application\Entity\Role $role
*/
public function removeRole(\Application\Entity\Role $role) {
$this->roles->removeElement($role);
}
/**
* Get role
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getRoles() {
return $this->roles->getValues();
}
}
一方、コントローラでエンティティを取得し、getRoles を使用すると、問題なく値を取得できます。
どちらが問題になる可能性があるか教えてください。
これは私の zfc-user-doctrine-orm-global です:
<?php
return array(
'doctrine' => array(
'driver' => array(
// overriding zfc-user-doctrine-orm's config
'zfcuser_entity' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'paths' => 'module\Application\src\Application\Entity',
),
'orm_default' => array(
'drivers' => array(
'Application' => 'zfcuser_entity',
),
),
),
),
'zfcuser' => array(
// telling ZfcUser to use our own class
'user_entity_class' => '\Application\Entity\User',
// telling ZfcUserDoctrineORM to skip the entities it defines
'enable_default_entities' => false,
),
'bjyauthorize' => array(
// Using the authentication identity provider, which basically reads the roles from the auth service's identity
'identity_provider' => 'BjyAuthorize\Provider\Identity\AuthenticationIdentityProvider',
'role_providers' => array(
// using an object repository (entity repository) to load all roles into our ACL
'BjyAuthorize\Provider\Role\ObjectRepositoryProvider' => array(
'object_manager' => 'doctrine.entitymanager.orm_default',
'role_entity_class' => 'Application\Entity\Role',
),
),
),
);