2014-09-08 2 views
0

FOSUserBundle을 사용하는 Symfony 2 응용 프로그램이 있습니다. 이 앱은 여러 조직의 회원이 사용하며, 조직에 특정 URL로 이동하여 등록하려면 http://www.myapp.com/[organisation_name]/register과 같이 게시 할 수 있기를 바랍니다. FOSUserBundle이 등록을 처리하게하려면 어떻게해야합니까? 또한 생성 한 사용자 레코드에 [organisation_name]을 추가하십시오.Symfony 2 및 FOSUserBundle - 등록시 경로에서 사용자 정보 추가

내 연구에 따르면 FOSUserBundle 이벤트 (REGISTRATION_SUCCESS?)에 연결해야 할 수도 있지만 URL에서 정보를 얻거나 정보를 얻는 정확한 메커니즘에 대해 잘 모르겠습니다.

FOSUserBundle Events

답변

1

이 같은 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); 
    } 
} 

그리고 잊지 마세요 구독자를 services.yml에 등록하십시오 :

acme_demo.event_subscriber: 
    class: Acme\DemoBundle\Event\EventSubscriber 
    tags: 
     - { name: kernel.event_subscriber } 
+0

고맙습니다. 핵심 요구 사항 중 하나는 URL이 매우 깔끔하고 조직이 매우 두드러진다는 것입니다. 구독자 내에서 쿼리 문자열 제안 대신 http://www.myapp.com/ [organisation_name]/register'에서 [organization]을 추출하는 좋은 방법이 있습니까? 약간의 연구는 URL에서 직접 읽을 수 있다고 제안하지만, 미리 파싱하는 것이 좋을 것입니다. 나머지 예제는 완벽하게 보입니다. – frumious

+0

맞아, 이것 좀 들여다 봐라. 가장 좋은 해결책은 내 EventSubscriber가 @router 서비스를 통과하도록 조정 한 다음 [Router] (http://symfony.com/doc/current/components/routing/introduction.html) 일반적으로 매개 변수를 뱉어 내듯이 URL을 구문 분석합니다. – frumious

+0

@frumious 많은 방법이 있습니다. 나는 다만 생각을 제안한다. 그래서 당신이 필요로하는 것처럼 그것을 가지고 놀 수 있습니다;) – sergekv

관련 문제