Sylius - Как внедрить FactoryInterface в мою собственную 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;
}
}

Я не могу найти, как ввести FactoryInterface Sylius.

Я казнил php app/console debug:container | grep factory искать сервис, но не появляется:(

Любое предложение?

1 ответ

Решение

Насколько я понял у вас проблема с декларацией сервиса. Я прав?

Для класса, который вы указали выше, вы должны зарегистрировать его как сервис, который будет украшать сервис по умолчанию. Это обычная сервисная декларация с дополнительными decorates атрибут в XML.

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

Некоторое дополнительное чтение по оформлению сервисов вы можете найти в документации Symfony. Однако в документации Sylius вы можете найти информацию о том, как внедрить вашу собственную фабрику в контроллер.

Другие вопросы по тегам