在我的第一个大型 Symfony2 项目上工作,我在掌握事件侦听器/订阅者的情况时遇到了一些麻烦。
我希望有一个事件订阅者在用户注册他们的帐户后将角色 (BLOG_USER) 添加到 FOSUser 实体。
这是我到目前为止所得到的:
注册监听器:
namespace MyBlog\SiteBundle\EventListener;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class RegistrationListener implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
);
}
public function onRegistrationSuccess(FormEvent $event){
$rolesArr = array('ROLE_USER', 'BLOG_USER');
$user = $event->getForm()->getData();
$user->setRoles($rolesArr);
}
}
服务.yml:
services:
myblog_user.registration_listener:
class: MyBlog\SiteBundle\EventListener\RegistrationListener
arguments: []
tags:
- { name: kernel.event_subscriber }
安全性.yml:
access_control:
- { path: ^/blog/, role: BLOG_USER }
到目前为止,当我注册一个新用户时,他们无法访问 /blog 路由(这是一组 CRUD 屏幕) - 我收到一条“拒绝访问”消息,对于没有 BLOG_USER 角色的用户来说,这是预期的。
编辑:
我的代码似乎确实将角色添加到数据库中的用户。在角色下的 fos_user 表中,我的用户有这个:
a:1:{i:0;s:9:"BLOG_USER";}
但是,似乎我的 access_control 没有看到这一点。
{% if is_granted('BLOG_USER') %}
is_granted 也失败了——它看不到用户拥有的角色......