我知道还有其他2个问题,但我认为这些问题都无法解决我要问的问题.
在Symfony 2.8中,有一个过时的注释,涉及使用“别名”标记定义为服务的表单,然后可以使用tant传递给“ createForm”以获取该表单.
因此,如果我错了,请纠正我,现在我们必须定义没有别名标签的服务:
#src/MyBundle/Resources/config/services.yml
my.form.as.service:
class: MyBundle\Form\Type\MyFormType
arguments: ["@doctrine.orm.entity_manager",%myparameter1%]
tags: { - name: form.type }
并在控制器中:
$form = $this->createForm('my.form.as.service');
但这给了我一个表单命名错误,因为该表单在getName函数中返回“ my_name”,并且期望该表单接收FQCN.好的,在我将控制器中的其他响应更改为之后:
use MyBundle\Form\Type\MyFormType;
...
$form = $this->createForm(MyFormType::class)
那行得通,并且在github中symfony成员说表单组件可以完成所有工作…但是如果我想用相同的类但用另一个参数而不是%parameter1%来定义seccond服务,该怎么办.在2.8和更早的版本中,我能够定义另一个服务并将其名称传递给createForm函数,但是现在它可以直接获取该类,我可以这样做吗? (我知道这样做可能很奇怪,也可能不必要,或者…).
对于symfony成员:我支持Javiereguiluz,此更改使您编写更多的代码,并使您无法完全控制表单组件如何使用服务.删除表单别名使我们的生活变得如此复杂是否有必要吗?谢谢!
解决方法:
抱歉,我一开始看错了你的问题.现在,正确答案:
如果您的表单类型需要具有动态配置设置(例如参数),则应创建一个表单类型选项.这允许动态更改此设置:
class MyFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $form, array $options)
{
$options['your_setting']; // read the option
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired('your_setting'); // add a required option
}
}
用法:
$this->createForm(MyFormType::class, null, [
'your_setting' => 'some value',
]);
另外,您也可以将设置默认为某个静态值或参数:
class MyFormType extends AbstractType
{
private $yourSetting;
public function __construct($yourSetting)
{
$this->yourSetting = $yourSetting;
}
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefault('your_setting', $this->yourSetting);
}
}
标签:forms,symfony,symfony-forms,php
来源: https://codeday.me/bug/20191118/2030475.html