Symfony Forms注入对象

尼克·杜尔格里迪斯

我有一个Symfony表单类型,我想在其上插入我创建的另一种表单:

$form = $this->createFormBuilder();
$form->add('quantity', NumberType::class);
$form->add('options', ProductOptionType::class);
$form->add('notes', TextareaType::class, ]);

ProductOptionType是我创建的另一种类型,但在此类型上,我向构造函数注入了当前产品,因此我知道该产品具有哪些可用选项,以便以表格形式添加(即颜色,大小等)。

class ProductOptionType extends AbstractType
{    
    private $productOptions;

    public function __construct(Product $product)
    {
        $this->productOptions = $product->getOptions();
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        foreach ($this->productOptions as $option) {
            $builder->add($option->getId(), ChoiceType::class, [
                'choices' => $option->getChoicesForForm(),
                'label' => $option->getName()
            ]);
        }
    }
}

问题是如何在此处传递构造函数???

$form->add('options', ProductOptionType::class);

上面的代码不会引发构造器无错误,因为它实例化了类型,而不会对注入器产生任何影响。

另外这个抛出异常:

$form->add('options', new ProductOptionType($product));

因为它需要一个字符串而不是一个对象。

马泰奥

您可以通过选项传递额外的数据

class ProductOptionType extends AbstractType
{    

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $productOptions = $options['productOptions'];

        foreach ($productOptions as $option) {
            $builder->add($option->getId(), ChoiceType::class, [
                'choices' => $option->getChoicesForForm(),
                'label' => $option->getName()
            ]);
        }
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        // you can define a required option field for work
        $resolver->setRequired([
             'productOptions',
         ]);
         // ...
         // You could specify which type of class is supported
        $resolver->setAllowedTypes([
             'productOptions' => ProductOptions:class,
         ]);
    }

}

然后在表单创建中使用它,如下所示:

$form->add('options', ProductOptionType::class, ['productOptions' => $product]);

希望有帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony 中的依赖注入

来自分类Dev

Symfony 中的依赖注入

来自分类Dev

Symfony2注入服务

来自分类Dev

通过XML的Symfony依赖注入

来自分类Dev

Symfony 服务注入到行动

来自分类Dev

Symfony / Jquery对象集合

来自分类Dev

Symfony依赖注入注入类的新实例

来自分类Dev

Symfony DI注入一个空数组,而不是实体管理器对象

来自分类Dev

树枝扩展中的Symfony依赖注入

来自分类Dev

Symfony 2.8用于方法注入的自动装配

来自分类Dev

使用EntityMenager进行Symfony依赖注入

来自分类Dev

Symfony2依赖注入:性能影响

来自分类Dev

注入树枝变量symfony2

来自分类Dev

symfony2注入依赖优化

来自分类Dev

Symfony2-如何注入可选参数

来自分类Dev

Symfony 依赖注入来修改服务参数

来自分类Dev

Symfony 从扩展类设置依赖注入

来自分类Dev

Symfony-FOSUserBundle大对象

来自分类Dev

实体预期对象返回symfony

来自分类Dev

Symfony中对象的Order属性

来自分类Dev

Symfony,缓慢创建新对象

来自分类Dev

Symfony-FOSUserBundle大对象

来自分类Dev

从响应 api symfony 创建对象

来自分类Dev

从html文件对象到Symfony文件对象

来自分类Dev

如何阻止Symfony截断我的POST对象?

来自分类Dev

Symfony:获取表单所基于的对象

来自分类Dev

Symfony对对象使用NotEqualTo验证器

来自分类Dev

在Symfony ACL中禁用对象身份检查

来自分类Dev

Symfony:遍历json对象到数组