Sylius - 如何将 FactoryInterface 注入我自己的工厂

Sylius - How to inject FactoryInterface to my own Factory

我正在尝试为 Sylius 表单创建自己的工厂。

搜索 Sylius 组件后我找到了操作方法。

这是我的工厂:

class CommentFactory implements CommentFactoryInterface
{
/**
 * @var FactoryInterface
 */
 private $factory;

/**
 * @param FactoryInterface $factory
 */
public function __construct(FactoryInterface $factory)
{
    $this->factory = $factory;
}

/**
 * {@inheritDoc}
 */
public function createNew()
{
    return $this->factory->createNew();
}

public function createWithPost($postId)
{
    $comment = $this->createNew();
    $comment->setPost($postId);

    return $comment;
}
}

我找不到如何注入 Sylius 的 FactoryInterface。

我执行了php app/console debug:container | grep factory搜索服务但是没有出现:(

有什么建议吗?

据我了解,您对服务声明有疑问。我对吗?

对于您在上面提供的class,您必须将其注册为一项服务,这将装饰一个默认服务。这是一个常规服务声明,在 xml 中带有附加的 decorates 属性。

    <service id="app.custom_factory.comment" class="App\Factory\CommentFactory" decorates="app.factory.comment">
        <argument type="service" id="app.custom_factory.comment.inner" />
    </service>

您可以找到一些关于服务修饰的额外阅读 in symfony documentation. In Sylius documentation however, you can find an information how to inject your custom factory to controller