假设我在可重复使用的包中有一个FormType,如下所示:
/**
* @Service("acme_core_purchase.form.add_to_basket")
* @FormType
*/
class AddToBasketType extends AbstractType
{}
在我的控制器中,我注入它,做我需要的任何事情:
/** @Inject("acme_core_purchase.form.add_to_basket") */
protected $add_to_basket_form;
在一个特定的项目中说我想扩展该表单并添加一些额外的字段,我打算用注释做什么?
class AddToBasketType extends BaseAddToBasketType
{}
我不能只创建一个具有相同服务名称的表单,而不是 工作/有意义 - 任务不遵循设定的优先级 据我所知,AppKernel :: registerBundles。我怀疑这是 无论如何,在概念上存在缺陷。
我可以更改服务名称,但是我需要注入不同的服务名称 我到处使用它的服务,包括扩展所有 那些东西。
我可以将服务名称存储在参数中然后注入它 到处都是这样,我可以拥有正确的服务名称 注入到处都是,但我还需要注入容器 能够检索服务。
在我需要的地方,我一直在做后者,但肯定在那里 是一个更好的方法?或者至少应该有。
答案 0 :(得分:0)
简单,使用Form组件自己的继承。
/**
* @Service("acme_core_purchase.form.add_to_basket")
* @FormType
*/
class AddToBasketType extends AbstractType
{
public function getName() { return 'add_to_basket'; }
public function getParent() { return 'form'; }
}
/**
* @Service("whatever")
* @FormType
*/
class AddToBasket2Type extends AbstractType
{
public function getName() { return 'add_to_basket2'; }
public function getParent() { return 'add_to_basket'; }
}
答案 1 :(得分:0)
注意parent="another.service.id"
<?php
use JMS\DiExtraBundle\Annotation\Service;
/**
* @Service("some.service.id", parent="another.service.id", public=false)
*/
class Listener
{
}