首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OroCommerce:具有扩展oro实体的表单

OroCommerce:具有扩展oro实体的表单
EN

Stack Overflow用户
提问于 2021-02-22 21:18:54
回答 2查看 338关注 0票数 2

我需要在订购过程中实现一些额外的东西--对于每个订购的项目,crm用户应该选择一个客户“选项”,并且选择应该按顺序保存。所以我创建了一个新的实体,它与客户有ManyToOne关系,为它实现了CRUD,所有的工作都正常,成功地与不同的客户创建了多个项目。

我扩展了Oro ShoppingList LineItem -用addManyToOneRelation创建的迁移到我的enitity和新的下拉列表中,允许使用自动完成框来选择实体。所有工作正常,除了我需要看到只有与客户相关的项目,而不是所有创建的实体。很容易获得客户(LineItem->customerUser-> customer ->customer->customerUser->customer目前,所有的东西都是由oro创建的(这真的很酷),我只做了一个迁移添加关系,我没有编写任何可以指定客户参数的代码。

另外,最好实现一些逻辑验证,即在LineItem中为产品选择的选项与客户相关,如果出于某些原因,它会抛出异常。但我能在哪里实现呢?

这是有形式的图片。还想知道为什么新的字段不对齐?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-24 21:55:10

终于起作用了!需要使用像prev答案中的迁移,下面是FormType的代码

代码语言:javascript
复制
class CustomersOptionSelectType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function (PreSetDataEvent $event) {
            $form = $event->getForm();
            $lineItem = $event->getForm()->getParent()->getData();
            $customer = $lineItem->getCustomerUser()->getCustomer();

            $qb = $event->getForm()->getConfig()->getOption('query_builder');
            $qb->setParameter('customer', $customer->getId());
        });
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'class'         => Option::class,
            'choice_label'  => 'name',
            'required'      => true,
            'query_builder' => function (EntityRepository $er) {
                return $er->createQueryBuilder('o')
                    ->where('o.customer = :customer')
                    ->orderBy('o.name', 'ASC')
                ;
            },
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function getParent(): string
    {
        return Type\Select2EntityType::class;
    }

}
票数 0
EN

Stack Overflow用户

发布于 2021-02-23 12:49:44

若要具有实体的自定义列表,必须重写已创建的实体字段所使用的窗体类型。要创建自定义表单类型,请遵循Symfony指南:type.html#creating-form-types-based-on-symfony-built-in-types

然后在“form”选项下使用新的表单类型进行迁移,如本例所示:2/UpdateUserFormType.php#L17-L24。省略示例中的最后一个参数,因为在任何情况下都应该替换该值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66323606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档