我正在尝试从灯具创建新的用户管理员。我正在使用FOSUserBundle和Symfony2。
$userManager = $this->container->get('fos_user.user_manager');
//$userAdmin = $userManager->createUser();
$userAdmin = new UserAdmin();
$userAdmin->setUsername('francis');
$userAdmin->setEmail('francis@francis.com');
$userAdmin->setEnabled(true);
$userAdmin->setRoles(array('ROLE_ADMIN'));
$userManager->updateUser($userAdmin, true);
我总是收到这个错误:
[ErrorException]
Notice: Undefined property:
INCES\ComedorBundle\DataFixtures\ORM\LoadUserAdminData::$container in
/public_html/Symfony/src/INCES/ComedorBundle/DataFixtures/ORM/LoadUserAdminData.php line 16
答案 0 :(得分:26)
这对我有用(我也使用FOSUserBundle):
// Change the namespace!
namespace Acme\DemoBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class LoadUserData implements FixtureInterface, ContainerAwareInterface
{
//.. $container declaration & setter
public function load(ObjectManager $manager)
{
// Get our userManager, you must implement `ContainerAwareInterface`
$userManager = $this->container->get('fos_user.user_manager');
// Create our user and set details
$user = $userManager->createUser();
$user->setUsername('username');
$user->setEmail('email@domain.com');
$user->setPlainPassword('password');
//$user->setPassword('3NCRYPT3D-V3R51ON');
$user->setEnabled(true);
$user->setRoles(array('ROLE_ADMIN'));
// Update the user
$userManager->updateUser($user, true);
}
}
希望这有助于某人! :)
答案 1 :(得分:3)
按照文档中的this部分进行操作。
答案 2 :(得分:2)
错误是因为$ container当前未定义。要解决此问题,请将ContainerAwareInterface添加到类定义中。
class LoadUserData implements FixtureInterface, ContainerAwareInterface
{
...
}
由于您在没有UserManager的情况下创建用户,因此无法完全满足您的需求。相反,你应该使用你注释掉的那一行。
在我看来,您不需要UserAdmin类。管理员用户应该是用户的子集,仅由他们拥有的角色区分。
您应该使用UserManager创建用户(而不是UserAdmin)并设置角色。 如果您需要保留所有管理员用户的索引,MySQL VIEW可以实现此目的,或者您可以创建自己的自定义“缓存”表并使用Doctrine Listeners在需要时更新它。
这个问题相当陈旧,所以我猜你找到了答案或者至少是一个解决方法。 你能提供吗?你可以回答自己的问题。
答案 3 :(得分:0)
这是SF3 +的更新版本 该答案基于Anil和Mun Mun Das的答案。
namespace App\DataFixtures;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use FOS\UserBundle\Model\UserManagerInterface;
class AdminFixtures extends Fixture
{
private $userManager;
public function __construct(UserManagerInterface $userManager)
{
$this->userManager = $userManager;
}
public function load(ObjectManager $manager)
{
$user = $this->userManager->createUser();
$user->setUsername('username');
$user->setEmail('email@domain.com');
$user->setPlainPassword('password');
$user->setEnabled(true);
$user->setRoles(array('ROLE_ADMIN'));
$this->userManager->updateUser($user);
}
}
答案 4 :(得分:0)
这就是我使用Symfony 4,SonataAdmin和FosUserBundle所做的
namespace App\DataFixtures;
use App\Application\Sonata\UserBundle\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
class UserFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$user = new User();
$user->setUsername('yourusername');
$user->setEmail('youremail@email.com');
$user->setEnabled(true);
$user->setPlainPassword('yourpassword');
$user->setRoles(array('ROLE_SUPER_ADMIN'));
$manager->persist($user);
$manager->flush();
}
}