Size: a a a

2021 July 09

VM

Volodymyr Melko in symfony
это фабрика для фабрик =) это не фабрика для сущностей
источник

A

Anthony in symfony
+
источник

A

Anthony in symfony
а чем плохи фабричные методы внутри самой сущности?
источник

D🦆

Dmitry 🦆 in symfony
Нарушение SRP
источник

VM

Volodymyr Melko in symfony
та не плохие, только когда они нужны.. например у тебя есть сущность, тот же автомобиль.. автомобиль может быть новым, с салона, а может быть БУшный от перекупа
у тебя есть 2 сценария, когда автомобиль попадает в твою систему. Когда продаваны в салоне заносят по прибытию новой партии или обычные люди или перекупы свою дасточку внести хотят

в сценарии нового авто будет что-то типа
Car::new($model, $color)
для БУ будет
Car::used($model, $color, $year, ...)

а под капотом и тот и другой метод будут вызывать
return new self($model, $color ....)

просто для новой, пробег к примеру будет сразу 0 идти, год выпуска - текущий и т.д

метод для создания БУ машины будет прокидывать явно переданные поля

Пример надуманный конечно, но идея такая. У тебя есть так называемые именованные конструкторы
Это по сути фабричные методы и они полезны, когда у тебя есть все необходимы данные для создания объекта сразу. Тогда нет смысла делать фабрику, которая и так прокинет все эти данные в конструктор и на этом все

Если же у тебя появляется доп логика, например, сходить в другую систему по АПИ и получить какие-то доп данные. Вызвать какой-то доп сервис-калькулятор и посчитать сумму с налогами для страны пользователя - это все уезжает в фабрику
источник

ON

Oleg Nechaev in symfony
Да, я так и понял, что фабрика для фабрик. Которая позволяет получать нужную сущность, не зная при этом нужной фабрики. Для решения моей задачи это подходит (несмотря на то, что в моем "абстрактном" примере это не отражено).

Но эта фабрика фабрик точно также скрывает зависимости. Предлагаете делать как-то так?

$factory = new CarFactory([
   'bmw' => new BmwCarFactory(),
   'mercedes' => new MercedesCarFactory(),
]);

var_dump($factory->create('bmw')->getName());
источник

VM

Volodymyr Melko in symfony
ага, только не в котроллере =) изучайте инструмент, которым пользуетесь
источник

PK

Petru Konyuk in symfony
Привет ребят. Вопросик не совсем по теме но есть где группа где можно просить помощь по переводу слов и предложений с английского?
источник

VM

Volodymyr Melko in symfony
источник

KF

Ktoja Fdf in symfony
Всем привет. Есть задача отрефакторить config.yaml, эти все ноды с ямла описаны в бэке. С симфони работаю не давно в связи с этим вопрос. Кто нить знает тулзу, которая после рефакторинг а ямл сконфигит на бэке эти ноды или это все ручками надо править? Что то годного ничего пока не нашел. Заранее благодарен за ответ ;)
источник

VM

Volodymyr Melko in symfony
что тебе отрефакторить то надо?
источник

DS

Denis Shlyapnikov in symfony
Народ, доброго вечера пятницы!
Есть сущность которая сериализуется в json. Есть в ней атрибут json @ORM\Column(name="pictures", type="json", nullable=true), как правильно его серилизовать?
Сейчас в json значение данного атрибута приходит null.

$serializer = new Serializer(
   [
       new DatetimeNormalizer(),
       new ObjectNormalizer(new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())))
   ],
   [
       new JsonEncoder()
   ]
);


Здесь .../symfony/serializer/Normalizer/* не нашёл что-то готовых решений. Нужно писать свой?
источник

VM

Volodymyr Melko in symfony
1. это ж аннотация ОРМ, при чем тут сериалайзер?
2. а в этом поле есть вообще значение, или оно и есть пустое?
источник

DS

Denis Shlyapnikov in symfony
1. Ага. Для понимания написал, что там массив)
2. Есть! Массив
источник

VM

Volodymyr Melko in symfony
ну дебаг в помощь тогда
источник

DS

Denis Shlyapnikov in symfony
Вы имеете ввиду, что должно нормально работать?
источник

VM

Volodymyr Melko in symfony
Да
источник

DS

Denis Shlyapnikov in symfony
Понятно. Значит где-то накосячил, буду смотреть
источник

В

Вадим in symfony
Геттер у аттрибута есть?
источник

DS

Denis Shlyapnikov in symfony
Вы были правы. Не тот объект передавал.
Почему-то так бывает, когда смотришь часами, не видишь ошибку. Стоить спросить у коллег хелп, так сразу третий глаз открывается.
источник