Я пытаюсь настроить мой пользователь энтитю роли, и после документации на http://symfony.com/doc/current/cookbook/security/entity_provider.htmlSymfony2 Doctrine - Извлечение Роли пользователей
Пользователи работают нормально, и если я жёстко в $ ролей дорожат все работает, как ожидалось , вход в систему/выход хорош и т. д. Но если я попытаюсь получить роли через отношения «многие ко многим», как указано в документации, я вернусь к нулю.
Следует также упомянуть, что после создания сущностей при запуске «php app/console doctrine: schema: update -force» она создала таблицу ролей, но не таблицу «user_role», как она говорила. Я пошел вперед и создал его вручную и ввел строку для пользователя, с которым я тестировал, но это был мой первый ключ, что-то не работало. Это действительно расстраивает, потому что я следил за документацией, и похоже, что она должна работать.
Я получаю ошибку назад при попытке войти в это:
FatalErrorException: Error: Call to a member function toArray() on a non-object
Что указывает на return $this->roles->toArray()
в объекте пользователя.
Мой Entity Пользователь (соответствующие биты):
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
/**
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="ACME\MyBundle\Entity\UserRepository")
*
*/
class User implements UserInterface, \Serializable
{
...
/**
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
*
*/
private $roles;
...
/**
* Constructor
*/
public function __construct()
{
$this->roles = new ArrayCollection();
}
public function getRoles()
{
return $this->roles->toArray();
}
...
}
Моя роль Entity:
use Symfony\Component\Security\Core\Role\RoleInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="role")
* @ORM\Entity()
*/
class Role implements RoleInterface
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=30)
*/
private $name;
/**
* @ORM\Column(name="role", type="string", length=20, unique=true)
*/
private $role;
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
*/
private $users;
public function __construct()
{
$this->users = new ArrayCollection();
}
/**
* @see RoleInterface
*/
public function getRole()
{
return $this->role;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return Role
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set role
*
* @param string $role
* @return Role
*/
public function setRole($role)
{
$this->role = $role;
return $this;
}
}
Видит кто-нибудь проблема в моем коде или иметь опыт работы с этим же вопросом? Я застрял в данный момент.
Объект Role связан с ролью таблицы. Таблица user_role - это таблица многих ко многим, которая содержит только user_id и role_id. – spacebean
это возврат $ this-> getRoles-> toArray() или возврат $ this-> role-> toArray() –
Извините, это 'return $ this-> role-> toArray()', как показано в объекте. – spacebean