Ответы пользователя по тегу Symfony
  • Где в Symfony 3 объявлять глобальные функции(heplers)?

    sggr
    @sggr
    PHP, Ruby, GO
    Пишу полноценный ответ, как это должно быть в Symfony. Не пытайтесь переносить практики других фрейморков типо Yii и Laravel на Symfony, это разные продукты для разных целей.
    В идеологии Symfony нет понятия хелпер как в Yii, ROR, Laravel. Вам необходимо объединить часто используемые функции в Service(называть это можно как угодно) по характеру функционала, поместить это в DI контейнер и инжектить в те классы в котором нужен этот сгруппированный функционал.
    И задумайтесь, если у вас есть такие классы хелперы, которые используются направо и налево - значит вы промахнулись с архитектурным решением. Один класс одна обязанность. Понимание SOLID и практика поможет вам выйти на другой уровень объектного проектирования и разработки в целом.
    Ответ написан
    7 комментариев
  • Как правильно сделать связь 1:M в агрегате при использовании DDD?

    sggr
    @sggr
    PHP, Ruby, GO
    Зачем вам interger? Зачем вам в конструктор передовать ID? Это DDD, вы работаете с объектами и их поведением, а не со свойствами объектов.
    То есть
    <?php
    class Violation
    {
        private $id;
        private $rules;
        public function __construct(ViolationID $vid, array $rules = []) {
            $this->id = $vid;
            $rules = $rules;
        }
        
        public function addRule(Rule $rule) {
            $this->rules[] = $rule;
            return $this;
        }
    
        public function deleteRule(Rule $rile)...
        public function getRules()...
        ...
    }
    
    class Rule
    {
        private $id;
        private $violation;
        public function __construct(RuleID $rid, Violation $violation) {
            $this->id = $rid;
            $this->violation = $violation;
        }
        ...
    }


    Проблем с маппингом никаких быть не должно, приведу пример в yaml и рекомендую при использовании DDD и доктрины использовать external mapping.

    Core\Violation:
      type: entity
      table: violation
      repositoryClass: InfrastructureBundle\Repository\PersistViolationRepository
      oneToMany:
        rules:
          cascade: [ "persist", "remove" ]
          targetEntity: Core\Rule
          mappedBy: violation
          orphanRemoval: true
    
    Core\Rule:
      type: entity
      table: rule
      repositoryClass: InfrastructureBundle\Repository\PersistRuleRepository
      manyToOne:
        violation:
          targetEntity: Core\Violation
          inversedBy: rules
          joinColumn:
            name: violation_id
            referencedColumnName: id


    UPD: Я плясал от того что одно нарушение содержит в себе несколько правил. Как я понял у вас наоборот, но сути это не меняет.
    Ответ написан
  • Как использовать интерфейс в DI Symfony 3?

    sggr
    @sggr
    PHP, Ruby, GO
    Очевидно AppBundle\Infrastructure\Persistence\ShipRepository не имплементит IShipRepository.
    Ответ написан