Sylius ResourceBundle:如何覆盖表单服务?
Sylius ResourceBundle: how to override a Form service?
在 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 从实体生成通用表单。
是否想将服务容器传递到我的表单 class?
谢谢!
最近在这里解决了同样的问题: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';
}
在 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 从实体生成通用表单。
是否想将服务容器传递到我的表单 class?
谢谢!
最近在这里解决了同样的问题: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';
}