symfony-forms - 如何将参数从 Controller 传递给FormType构造函数

标签 symfony-forms symfony

在Symfony2.7中,我可以在创建表单时直接从 Controller 将参数传递给Form Type构造函数,但是在Symfony3中,我无法做到这一点!

在Symfony2.7中使用

$postedBy = $this->getUser()->getFullname();
$form = $this->createForm(new NewsType($postedBy));

在Symfony3中之后
$form = $this->createForm(NewsType::class); // no idea how to pass parameter?

更新:
我还想从以下位置访问它:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
    // how to access posted_by_name here which is sent from controller
}

任何帮助将不胜感激。

最佳答案

谢谢你的时间!我自己解决了这个问题:

我从NewsType构造函数中删除了参数,并使用$ options数组将数据添加到postedBy表单字段,并将数据从 Controller 传递到$ options数组,请检查以下内容:

新闻类型

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('postedBy', HiddenType::class, array(
            'data' => $options['postedBy']
          )
        )
    ;
}

// WARNING: this is a MANDATORY block! Only options described here will be allowed to be passed.
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'postedBy' => null,
    ));
}

Controller
$form = $this->createForm(NewsType::class, $news, array(
    'postedBy' => $this->getUser()->getFullname(),
);

更新:
如果要从addEventListener访问$ options数组,请使用以下代码:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
    $postedBy = $event->getForm()->getConfig()->getOptions()['postedBy'];
}

希望对您有所帮助!

关于symfony-forms - 如何将参数从 Controller 传递给FormType构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36905490/

相关文章:

php - symfony 形式的另一个日期之后的日期

php - Php7中的数组到字符串转换

symfony-forms - 如何获取表单类型的实体管理器

symfony - 多文件验证 : "This value should be of type string"

symfony - Doctrine - 对多个(多对多)关系使用同一个表

php - 在 Symfony2 中运行 cron 作业 - 尝试调用 Controller 中的方法

PhpAmqpLib : Uncaught exception 'ErrorException' with message 'fwrite(): send of 19 bytes failed with errno=104 Connection reset by peer'

testing - 用于使用 phpunit 进行测试的临时 Doctrine2 装置

symfony - 如何正确地将日期转换为字符串并以 symfony 形式转换回来,以便可以使用日期选择器

Symfony 表单继承 : Neither the property nor one of the methods exist