Php Symfony 2和FOSUserBundle-在注册期间将信息从路径添加到用户
我有一个使用FOSUserBundle的Symfony 2应用程序。该应用程序将由多个不同组织的成员使用,我希望他们能够访问特定于组织的URL进行注册,例如Php Symfony 2和FOSUserBundle-在注册期间将信息从路径添加到用户,php,symfony,fosuserbundle,Php,Symfony,Fosuserbundle,我有一个使用FOSUserBundle的Symfony 2应用程序。该应用程序将由多个不同组织的成员使用,我希望他们能够访问特定于组织的URL进行注册,例如http://www.myapp.com/[机构名称]/注册。我如何让FOSUserBundle处理注册,同时将[organization\u name]添加到它创建的用户记录中 我的研究表明,我可能需要加入FOSUserBundle事件(注册\成功?),但我不确定具体机制或从URL获取信息 您可以使用GET属性,如下所示: http://w
http://www.myapp.com/[机构名称]/注册
。我如何让FOSUserBundle处理注册,同时将[organization\u name]
添加到它创建的用户记录中
我的研究表明,我可能需要加入FOSUserBundle事件(注册\成功
?),但我不确定具体机制或从URL获取信息
您可以使用
GET
属性,如下所示:
http://www.myapp.com/register?org=acme
namespace Acme\DemoBundle\Event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use FOS\UserBundle\Event\FormEvent;
class EventSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
'fos_user.registration.success' => array('onRegistrationSuccess', 10),
);
}
public function onRegistrationSuccess(FormEvent $event)
{
$user = $event->getUser();
$org = $event->getRequest()->query->get('org');
$user->setOrganisation($org);
}
}
在本例中,事件订阅服务器将如下所示:
http://www.myapp.com/register?org=acme
namespace Acme\DemoBundle\Event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use FOS\UserBundle\Event\FormEvent;
class EventSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
'fos_user.registration.success' => array('onRegistrationSuccess', 10),
);
}
public function onRegistrationSuccess(FormEvent $event)
{
$user = $event->getUser();
$org = $event->getRequest()->query->get('org');
$user->setOrganisation($org);
}
}
不要忘记在服务中注册您的订户。yml
:
acme_demo.event_subscriber:
class: Acme\DemoBundle\Event\EventSubscriber
tags:
- { name: kernel.event_subscriber }
非常感谢。其中一个关键要求是URL非常整洁,组织非常突出。是否有一种从
http://www.myapp.com/[组织名称]/register
(而不是您的查询建议)是否从订阅者内部进行?一些研究表明,我可以直接从URL中读取,但最好是预先解析。您的示例的其余部分看起来很完美。对,请仔细研究一下。似乎最好的解决方案是安排我的EventSubscriber也被传递给@router服务,然后让它像平常一样解析URL,吐出参数。@frumious有很多方法可以做到这一点。我只是提出一个想法。因此,您可以根据需要使用它;)