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

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

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值