:
をSyliusでは、登録後に解雇イベントsylius.customer.post_register
があります。 ShopUserManagerがsetUserRoleメソッドに引数として渡され
app.registration_listener:
class: AppBundle\EventListener\RegistrationListener
tags:
- { name: kernel.event_listener, event: sylius.customer.post_register, method: setUserRole }
arguments:
- "@sylius.manager.shop_user"
:私は(services.ymlで定義された)のリスナーを作成しました。リスナーで
public function __construct(ObjectManager $userManager) {
$this->userManager = $userManager;
}
、私はイベントの「主題」として$ユーザーオブジェクトを取得します:
public function setUserRole(GenericEvent $event)
{
$customer = $event->getSubject();
$user = $customer->getUser();
....
$this->userManager->persist($user);
$this->userManager->flush();
}
それから私は$ユーザーを変更(私の役割を追加)し、それを保存することができますShopUserManager。
Tks Zaleslaw、私は理解していません。ShopUserはSyliusエンティティなので、作成時に自分で定義したロールを与えることができますか? – wyllyjon
はい、 'ShopUser'はエンティティなので、例えばフォームの中で明確に定義された' ChoiceType'フィールドを使って設定できるはずです。デフォルトロールを変更する場合は、アプリ内の「ShopUser」エンティティをオーバーライドする必要があります(デフォルトでは、ROLE_USERロールが1つあります)。 '' $ roles''プロパティを他のプロパティと考えると、そのフィールドをフィールドにしてフォームで選択します; – Zaleslaw
私は理解していませんが、フォームの中で役割を選択したくありませんユーザーによって。私はすでにフォームに 'タイプ'フィールドを持っており、選択した値に応じて、私はユーザーに何らかの役割を与えます。登録フォームでは、使用されるモデルは「顧客」であり、ShopUserは「顧客」属性を有する。私がやったのは、ShopUserをオーバーライドし、setCustomerをオーバーライドし、そのメソッド内で 'type'属性をテストし、 'addRole'を呼び出します。しかし、私はまだデフォルトの役割を持ち、新しい役割は持っていません。自分の役割を正しく追加するために他のどの方法を上書きするか分かりません – wyllyjon