ログに記録されたユーザー ロールに応じて変更する必要がある選択肢タイプを持つフォーム クラス タイプを作成したchoice_list
ので、フォーム クラス タイプは現在のユーザー ロールにアクセスし、choice_list
それに応じて変更する必要があります。
誰かが Symfony2 フォーム パターンを通じてそれを達成するためのきちんとした方法を指摘できますか?
ログに記録されたユーザー ロールに応じて変更する必要がある選択肢タイプを持つフォーム クラス タイプを作成したchoice_list
ので、フォーム クラス タイプは現在のユーザー ロールにアクセスし、choice_list
それに応じて変更する必要があります。
誰かが Symfony2 フォーム パターンを通じてそれを達成するためのきちんとした方法を指摘できますか?
フォーム タイプをサービスとして登録し、コンストラクターを介してセキュリティ コンテキストを取得する必要があります。インストール済みの場合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', /* ... */);
これを行う別の方法は次のとおりです。
/** @DI\FormType */
class ModelType extends AbstractType {
/** @DI\Inject("security.context") */
public $security;