gpt4 book ai didi

php - 在 symfony 3.0 中将表单定义为服务

转载 作者:搜寻专家 更新时间:2023-10-31 20:35:24 24 4
gpt4 key购买 nike

我知道还有其他 2 个问题,但我认为它们都不能解决我要问的问题。

在 Symfony 2.8 中有一个关于标记定义为具有“别名”的服务的表单的弃用说明,thant 可以用来传递给“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 }

在 Controller 中:

$form = $this->createForm('my.form.as.service');

但这给了我一个表单命名错误,因为表单在 getName 函数中返回“my_name”,并且它期望表单接收 FQCN。好的,按照 Controller 中的其他响应,我更改为:

use MyBundle\Form\Type\MyFormType;
...
$form = $this->createForm(MyFormType::class)

这行得通,在 github 中 symfony 成员说表单组件完成了所有工作......但是如果我想定义一个具有相同类但使用另一个参数而不是 %parameter1% 的第二个服务怎么办?在 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);
}
}

您可以在 OptionsResolver component documentation 中阅读更多相关信息.

关于php - 在 symfony 3.0 中将表单定义为服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36881486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com