2014-03-31 28 views
1

在FOSUserBundle,我需要重寫FOSUserBundle這個RegistrationController,因爲我需要補充一點:覆蓋一個FOSUserBundle這個RegistrationController

if($user->getType()=="Student") { 
    $user->addRole("ROLE_Student"); 
} 
else { 
    $user->addRole("ROLE_TEACHER"); 
} 

它的工作原理,當我在vendor--->...---->registrationcontroller添加。這就是爲什麼我需要覆蓋註冊控制器,但如何?

回答

2

請勿覆蓋控制器。你應該使用事件系統!創建一個訂閱FOSUserEvents::REGISTRATION_COMPLETE的事件處理程序,然後執行角色添加。

文檔:

監聽器:

class RegistrationListener implements EventSubscriberInterface 
{ 
    public function __construct(/* ... */) 
    { 
     // ... 
    } 

    public static function getSubscribedEvents() 
    { 
     return array(
      FOSUserEvents::REGISTRATION_COMPLETE => 'addRole', 
     ); 
    } 

    public function addRole(FilterUserResponseEvent $event) 
    { 
     $user = $event->getUser(); 
     // Add the role here 
     // ... 
    } 
} 

服務定義:

<service id="my_app.event.registration" class="MyApp\Event\RegistrationListener"> 
    <tag name="kernel.event_subscriber" /> 
    <!-- ... --> 
</service> 
+0

服務是service.yml你能告訴我怎麼能做到這一點。我不能在這個函數中做什麼代碼函數public function __construct(/ * ... * /) { // ... } – razzek

+0

@razzek您應該閱讀文檔:[掛鉤到控制器](https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/controller_events.md) – Florent