Addaptive Symfony2表单选择

时间:2013-03-04 19:50:31

标签: symfony symfony-forms

我刚刚创建了一个表单类型,它有一个选择类型,其中choice_list必须根据记录的用户角色进行更改,因此表单类类型需要访问当前用户角色,然后更改{ {1}}根据它。

有人能指出一种通过Symfony2表单模式完成它的简洁方法吗?

2 个答案:

答案 0 :(得分: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', /* ... */);

答案 1 :(得分:0)

以下是另一种方法:

 /** @DI\FormType */ 

class ModelType extends AbstractType { 

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

public $security;