FosuserBundle編集ビューでグループロールを表示します
-
20-12-2019 - |
質問
選択したグループからの役割を表示するには、コントローラとFormTypeを上書きすることを試みますが、正しい方法は見つかりません。私はすべてをオーバーライドするためのステップを続けました、それは動作しますが、私がコンストラクトオブジェクトを渡すサービスに言うときに問題が生まれます。
FormTypeを上書きする必要があるため、実装に必要なサービスを通過させる方法、マイグループエンティティ?
誰もがそれを達成する方法を考えていますか?
これは私がやったことです:
-
コントローラを上書きし、フォームを作成するときは、
を渡します。$group
エンティティ$formFactory = $this->container->get('fos_user.group.form.factory'); $form = $formFactory->createForm($group); //Here
-
フォームをオーバーライドし、私のエンティティを渡すことができるカスタム__constructメソッドを使用します(たぶんここにいます。
public function __construct(Container $container, Groups $group) { $this->container = $container; $this->roles = array_keys($this->container->getParameter('security.role_hierarchy.roles')); $this->group = $group; #How? }
-
ドキュメントとしてサービスを作成する(ここでは本当の問題と例外があります)
x_s_cosmos.group.form.type: class: X\S\CosmosBundle\Form\Type\GroupFormType arguments: [@service_container, here_should_be_my_entity?] tags: - { name: form.type, alias: kosmos_group_form }
役割のキーを取得するためのコンテナはエラーなしで渡され、それは機能します。
私は本当にそれと積み上げられており、その上に行く方法を考えていません。
解決
最後に、GroupController.phpをオーバーライドし、選択フィールドタイプを私のフォームに追加した後、私は私の目標を達成できました。
$form->add('roles', 'choice', array(
'choices' => $this->getExistingRoles(),
'data' => $group->getRoles(),
'label' => 'Roles',
'expanded' => true,
'multiple' => true,
'mapped' => true,
));
.
ここでGetExistingRoles()は:
$roleHierarchy = $this->container->getParameter('security.role_hierarchy.roles');
$roles = array_keys($roleHierarchy);
foreach ($roles as $role) {
$theRoles[$role] = $role;
}
return $theRoles;
.
私は間違った方法で行くだけで、グループの役割を取得して管理インターフェースに表示することはそれほど難しくありませんでしたので、システムの役割の1つを選択してグループにしてください。フォームタイプを上書きする必要はありません。
私に頭痛が多いので、それが役立つことを願っています。
他のヒント
エンティティをコンストラクタに渡すべきではありません。フォーム内のエンティティにアクセスする必要がある場合は、次のようにイベントリスナーをフォームビルダーに追加する必要があります。
public function buildForm(FormBuilder $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$entity = $event->getData();
// This is your Group entity, now do something with it...
if ($entity instanceof Group) {
// $form->add ...
}
});
}
.