Zend framework zfcuser在注册后添加用户角色
我将Zend Framework 2与ZfcUser、BjyAuthorize和Doctrine一起用于数据库。到目前为止,注册等工作进展顺利。我的问题是,注册用户没有分配角色,因此我想在注册期间向用户添加角色“user” 我想我可以把这个附加到“注册”事件上,但我不知道怎么做 我希望有人能帮助我 (我使用本教程设置zfcuser等)Zend framework zfcuser在注册后添加用户角色,zend-framework,doctrine-orm,zfcuser,bjyauthorize,Zend Framework,Doctrine Orm,Zfcuser,Bjyauthorize,我将Zend Framework 2与ZfcUser、BjyAuthorize和Doctrine一起用于数据库。到目前为止,注册等工作进展顺利。我的问题是,注册用户没有分配角色,因此我想在注册期间向用户添加角色“user” 我想我可以把这个附加到“注册”事件上,但我不知道怎么做 我希望有人能帮助我 (我使用本教程设置zfcuser等) 也许这不是最好的解决方案,但对我来说很有效。 在配置范围中添加用户角色id选项 public function onBootstrap(MvcEvent
也许这不是最好的解决方案,但对我来说很有效。 在配置范围中添加用户角色id选项
public function onBootstrap(MvcEvent $mvcEvent)
{
$zfcServiceEvents = $mvcEvent->getApplication()->getServiceManager()->get('zfcuser_user_service')->getEventManager();
$zfcServiceEvents->attach('register', function($e) use($mvcEvent) {
$user = $e->getParam('user');
$em = $mvcEvent->getApplication()->getServiceManager()->get('doctrine.entitymanager.orm_default');
$config = $mvcEvent->getApplication()->getServiceManager()->get('config');
$defaultUserRole = $em->getRepository('SamUser\Entity\Role')->find($config['user_role_id']);
$user->addRole($defaultUserRole);
});
}
也许有人会提供更好的解决方案。我刚刚使用了MySQL触发器
DROP TRIGGER IF EXISTS `user_role_after_insert_trig`;
DELIMITER //
CREATE TRIGGER `user_role_after_insert_trig` AFTER INSERT ON `user`
FOR EACH ROW begin
insert into user_role_linker (user_id,role_id) values (new.user_id, 5);
end
//
DELIMITER ;
基于DangelZM的回答,并使用另一个关于事件管理器的参考资料(请参阅本文末尾的链接),我提出了这个解决方案,它将潜在的ZfcUser事件侦听器组织到一个用户侦听器对象中 注意:我创建了自己的名为NvUser的用户模块,因此根据您模块的名称,您必须将NvUser的所有引用替换为您的用户模块名称 总结 我创建了一个NvUserListener对象,它本身可以将事件侦听器附加到共享事件管理器,并容纳事件侦听器回调 内部NvUser/Module.php:
<?php
namespace NvUser;
use Zend\Mvc\MvcEvent;
use NvUser\Listener\NvUserListener;
class Module
{
public function onBootstrap(MvcEvent $mvcEvent)
{
$em = $mvcEvent->getApplication()->getEventManager();
$em->attach(new NvUserListener());
}
}
<?php
namespace NvUser\Listener;
use Zend\EventManager\AbstractListenerAggregate;
use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\Event;
class NvUserListener extends AbstractListenerAggregate
{
public function attach(EventManagerInterface $events)
{
$sharedManager = $events->getSharedManager();
$this->listeners[] = $sharedManager->attach('ZfcUser\Service\User', 'register', array($this, 'onRegister'));
$this->listeners[] = $sharedManager->attach('ZfcUser\Service\User', 'register.post', array($this, 'onRegisterPost'));
}
public function onRegister(Event $e)
{
$sm = $e->getTarget()->getServiceManager();
$em = $sm->get('doctrine.entitymanager.orm_default');
$user = $e->getParam('user');
$config = $sm->get('config');
$criteria = array('roleId' => $config['zfcuser']['new_user_default_role']);
$defaultUserRole = $em->getRepository('NvUser\Entity\Role')->findOneBy($criteria);
if ($defaultUserRole !== null)
{
$user->addRole($defaultUserRole);
}
}
public function onRegisterPost(Event $e)
{
$user = $e->getParam('user');
$form = $e->getParam('form');
// Do something after user has registered
}
}
<?php
namespace NvUser;
return array(
'zfcuser' => array(
'new_user_default_role' => 'user',
),
);
这也行
public function onBootstrap(MvcEvent $mvcEvent)
{
$zfcServiceEvents = $mvcEvent->getApplication()-getServiceManager()->get('zfcuser_user_service')->getEventManager();
$zfcServiceEvents->attach('register', function($e) use($mvcEvent) {
$user = $e->getParam('user');
$em = $mvcEvent->getApplication()->getServiceManager()-get('doctrine.entitymanager.orm_default');
$defaultUserRole = $em->getRepository('SamUser\Entity\Role')-find('id_of_your_role_on_table_role_for_example: '2'');
$user->addRole($defaultUserRole);
});
}
非常有用。非常感谢。
public function onBootstrap(MvcEvent $mvcEvent)
{
$zfcServiceEvents = $mvcEvent->getApplication()-getServiceManager()->get('zfcuser_user_service')->getEventManager();
$zfcServiceEvents->attach('register', function($e) use($mvcEvent) {
$user = $e->getParam('user');
$em = $mvcEvent->getApplication()->getServiceManager()-get('doctrine.entitymanager.orm_default');
$defaultUserRole = $em->getRepository('SamUser\Entity\Role')-find('id_of_your_role_on_table_role_for_example: '2'');
$user->addRole($defaultUserRole);
});
}