Как работает механика для динамического создания сервисов в 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.