2

ログに記録されたユーザー ロールに応じて変更する必要がある選択肢タイプを持つフォーム クラス タイプを作成したchoice_listので、フォーム クラス タイプは現在のユーザー ロールにアクセスし、choice_listそれに応じて変更する必要があります。

誰かが Symfony2 フォーム パターンを通じてそれを達成するためのきちんとした方法を指摘できますか?

4

2 に答える 2

5

フォーム タイプをサービスとして登録し、コンストラクターを介してセキュリティ コンテキストを取得する必要があります。インストール済みの場合JMSDiExtraBundleは、次のようにします。

<?php
namespace ...;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Security\Core\SecurityContextInterface;
use JMS\DiExtraBundle\Annotation\FormType;
use JMS\DiExtraBundle\Annotation\InjectParams;
use JMS\DiExtraBundle\Annotation\Inject;

/**
 * @FormType
 */
class YourType extends AbstractType
{
    /**
     * @InjectParams({
     *     "securityContext" = @Inject("security.context")
     * })
     *
     * @var SecurityContextInterface
     */
    public function __construct(SecurityContextInterface $securityContext)
    {
        $this->securityContext = $securityContext;
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'your_type';
    }
}

このようにして、セキュリティ コンテキストから必要なものをすべて取得できます。

フォームはサービスとして登録されているため、フォームを作成するときはクラスの代わりにその名前を使用します。

$form = $this->createForm('your_type', /* ... */);
于 2013-03-04T20:09:49.940 に答える
0

これを行う別の方法は次のとおりです。

 /** @DI\FormType */ 

class ModelType extends AbstractType { 

/** @DI\Inject("security.context") */ 

public $security;
于 2014-06-04T18:42:08.520 に答える