Ответы пользователя по тегу Symfony
  • Как в Symfony 4 отобразить роуты для frontend разработчика?

    @Flying
    php -f bin/console -- debug:router
    Ответ написан
    Комментировать
  • Как в Doctrine сделать one-to-many с коллекцией?

    @Flying
    У вас потенциально две ошибки в приведённом коде:

    1. В качестве возвращаемоног типа вы указываете \Collection, тогда как коллекции Doctrine - это \Doctrine\Common\Collections\Collection
    2. Ваш код не создаёт эту коллекцию, соответственно если это не entity созданная самой Doctrine при загрузке данных из базы - значение $meta - null. Корректный подход - это либо инициализировать коллекции в конструкторе:
    public function __construct() {
      $this->meta = new ArrayCollection(); // где ArrayCollection это \Doctrine\Common\Collections\ArrayCollection
    }

    либо непосредственно в методе:
    public function getMeta() : Collection
    {
        if (!$this->meta) {
            $this->meta = new ArrayCollection();
        }
        return $this->meta;
    }
    Ответ написан
    Комментировать
  • Как получить удаленные из коллекции сущности Doctrine?

    @Flying
    Ответы на ваши вопросы, очевидно, кроются в исходниках Doctrine:
    Видно что поведение метода clear() зависит от того какую из сторон ассоциации вы очищаете. Также видно что если вы работаете с owner side ассоциации - то Doctrine создаёт новый snapshot.

    Из кода методов getInsertDiff и getDeleteDiff видно что вычисление разницы происходит через сравнение snapshot'а с текущим содержимым коллекци, так что очевидно что в случае создания нового snapshot'а разница будет пустым массивом.

    Проверить, вызывает ли сама Symfony метод clear() проще всего, поставив там точку останова.
    Ответ написан
    3 комментария
  • Где symfony DI собирает все зависимости?

    @Flying
    Если говорить именно об аргументах контроллера, то они собираются в ArgumentResolver::getArguments() на основании метаданных (получаемых через reflection) из ArgumentMetadataFactory::createArgumentMetadata. Передача аргументов в action контроллера идёт при его вызове здесь.

    Если же речь идёт об общем случае то там схема существенно сложнее т.к. непосредственно инициализация сервисов очень сильно отличается в зависимости от настроек контейнера в отношении конкретного сервиса (вспоминаем про factories, абстрактные сервисы и т.п.), но в общем случае все варианты приводят к генерации соответствующего метода в контейнере.
    Ответ написан
    Комментировать