symfony - 自适应 Symfony2 表单选择

标签 symfony symfony-forms

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

关于symfony - 自适应 Symfony2 表单选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15209910/

相关文章:

symfony - JMS 序列化程序 : overriding default naming strategy in symfony 4 has no effect

jquery - Symfony2 : Add Collection via AJAX Outside of Symfony

php - 如何使用构造函数测试 symfony 表单类型

symfony - 什么是 symfony2 学说的 DAL 替代方案

symfony - 在 Symfony 项目中查找未使用的 TWIG 布局

symfony 2 twig限制文本的长度并放置三个点

Symfony2 JMS Serializer - 修改某些值

symfony - 将 "help"消息添加到字段

symfony - 在 Symfony 2/Doctrine 2 中使用 MappedSuperclass 字段不持久?

symfony - symfony 3.4 形式的新实体中的空值没有默认值