Как работает механизм динамического создания сервисов в Sylius?

Как работает механика для динамического создания сервисов в Sylius, которые затем доступны как обычные сервисы, настроенные в файле services.yml в методе get().

Я говорю об этой ситуации:

Расширение базовых моделей Все модели Sylius находятся в пространстве имен Sylius\Component\Xyz\Model вместе с интерфейсами. Например, для компонента налогообложения Sylius это TaxCategory и TaxRate.

Предположим, вы хотите добавить поле «зона» к налоговым ставкам Sylius.

Во-первых, вам нужно создать собственный класс TaxRate, который расширит базовую модель.

namespace Acme\Bundle\ShopBundle\Entity;

use Sylius\Component\Addressing\Model\ZoneInterface; use Sylius\Component\Taxation\Model\TaxRate as BaseTaxRate;

class TaxRate extends BaseTaxRate { private $zone;

public function getZone()
{
    return $this->zone;
}

public function setZone(ZoneInterface $zone)
{
    $this->zone = $zone;

    return $this;
}

}

Наконец, вы настраиваете свой класс в файле app/config/config.yml.

sylius_taxation: driver: doctrine/orm classes: tax_rate: model: Acme\ShopBundle\Entity\TaxRate # Your tax rate entity.

Sylius автоматически генерирует доступ к классу, как обычные сервисы.

  • Параметр sylius.model.tax_rate.class содержит Acme\Bundle\ShopBundle\Entity\TaxRate.
  • sylius.repository.tax_rate представляет репозиторий Doctrine для вашего нового класса.
  • sylius.manager.tax_rate представляет менеджер объектов Doctrine для вашего нового класса. d-sylius.controller.tax_rate представляет контроллер для вашего нового класса.

Как это работает? Это пучок? Это очень хорошее решение. Я хотел бы реализовать механику в своем собственном проекте на Symfony2.


person Ravaelman    schedule 06.11.2015    source источник
comment
Не только это, но и пакет ресурсов дает вам функциональность CRUD из коробки в классе ResourceController.   -  person gvf    schedule 07.11.2015


Ответы (1)


Если вы хотите использовать это в своих собственных проектах, просто интегрируйте SyliusResourceBundle через composer. Теперь вы можете определить ресурс в своей конфигурации с заданными классами.

sylius_resource:
    resources:
        app.entity_name:
            driver: doctrine/orm
            object_manager: default
            templates: App:User
            classes:
                model: App\Entity\EntityName
                interface: App\Entity\EntityNameInterface

Теперь доступны службы app.model.entity_name, app.repository.entity_name, app.manager.entity_name и app.controller.entity_name.

http://docs.sylius.org/en/latest/bundles/SyliusResourceBundle/configuration.html

person Emii Khaos    schedule 07.11.2015