OK、私はartworkadのアイデアの実装に取り掛かりました。
私が最初にしたことは、FOSUserEventsクラスを実装していないv1.3.1を使用していたため、composer.jsonの2.0.*@devにFOSUserBundleを更新することでした。これは私の登録イベントを購読するために必要です。私は、引数doctrine.orm.entity_manager
を通じて教義へのアクセスを必要なサービスを告げ、XMLで
<!-- Moskito/Bundle/UserBundle/Resources/config/services.xml -->
<service id="moskito_bundle_user.user_creation" class="Moskito\Bundle\UserBundle\EventListener\UserCreationListener">
<tag name="kernel.event_subscriber" alias="moskito_user_creation_listener" />
<argument type="service" id="doctrine.orm.entity_manager"/>
</service>
:
// composer.json
"friendsofsymfony/user-bundle": "2.0.*@dev",
は、それから私は、新しいサービスを追加しました。次に、私はリスナーを作成しました:
// Moskito/Bundle/UserBundle/EventListener/UserCreationListener.php
<?php
namespace Moskito\Bundle\UserBundle\EventListener;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Doctrine\ORM\EntityManager;
/**
* Listener responsible to change the redirection at the end of the password resetting
*/
class UserCreationListener implements EventSubscriberInterface
{
protected $em;
protected $user;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
);
}
public function onRegistrationSuccess(FormEvent $event)
{
$this->user = $event->getForm()->getData();
$group_name = 'my_default_group_name';
$entity = $this->em->getRepository('MoskitoUserBundle:Group')->findOneByName($group_name); // You could do that by Id, too
$this->user->addGroup($entity);
$this->em->flush();
}
}
そして基本的には、それです!
登録が成功するたびに、onRegistrationSuccess()
が呼び出されますので、FormEvent $event
を介してユーザーを取得し、既定のグループに追加します。これをDoctrineに追加します。
回答の2番目の部分は、私がやりたいことのように見えます。私はそれを実装し、解決策としてここに回答を投稿しようとします。 – Weengs