Sylius ResourceBundle:如何覆盖Form服务?

时间:2016-01-19 16:00:48

标签: php symfony resourcebundle sylius

在ResourceBundle中,我已经配置了资源" charge.quote" :

sylius_resource:
    resources:
        charge.quote:
            classes:
                controller: ChargeBundle\Controller\QuoteController
                model: ChargeBundle\Entity\Quote
                repository: ChargeBundle\Repository\QuoteRepository
                form:
                    default: ChargeBundle\Form\QuoteType

我想知道如何覆盖表单服务,由ResourceBundle生成为charge.form.type.quote。目的是能够从QuoteType访问服务容器。

我试图声明一个其他服务来覆盖ResourceBundle生成的服务,如下所示:

<service id="charge.form.type.quote" class="%charge.form.type.quote.class%">
    <argument type="service" id="service_container" />
    <tag name="form.type" />
</service>

但是自定义表单将被忽略:ResourceBundle从实体生成通用表单。

是否有意将服务容器传递给我的表单类?

谢谢!

1 个答案:

答案 0 :(得分:2)

最近在这里解决了同样的问题:https://github.com/Sylius/Sylius/issues/3843

从问题中简单回答:

您只需定义一个具有相同名称的服务,例如app.form.type.book,并为其指定别名app_book。 Sylius将从现在开始使用它。 :)

sylius_resource:
    resources:
        zdg.registration:
            templates: EGBundle:Backend/Registration
            classes:
                model: ZDG\EGBundle\Entity\Registration

服务:

services:
    zdg.eg.type.registration:
        class: ZDG\EGBundle\Form\Type\RegistrationType
        tags:
            - { name: form.type, alias: zdg_registration }
        arguments: [@doctrine, @sylius.context.locale]

您的表单类型名称必须与别名匹配。添加到您的类型:

public function getName()
{
    return 'zdg_registration';
}