我刚刚创建了一个表单类类型,它有一个选择类型,其中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;