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

标签 php forms symfony-forms symfony

我知道还有其他 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/

相关文章:

Php new DateTime() 在我的新服务器上不工作

php - 找不到类 'FFMpeg\FFMpeg\Coordinate\Dimension'

symfony1 - Symfony 表单 - 记住之前选择的文件

javascript - php 中表单类型范围 undefined index

javascript - 不使用鼠标提交表单时会调用提交按钮的onclick事件吗?

symfony - 在 Symfony2 表单输入中设置带有翻译的占位符属性

symfony - 从 Symfony DateType::class 禁用日期和月份

PHP 到 Google WebApp 返回 "<H1>Moved Temporarily</H1>The document has moved"

php - 如果未选中复选框,则删除数据库条目

javascript - 使用 JSON 的 JSP 表单提交