Size: a a a

2020 June 24

AM

Artem Molotov in PHP
Katulos⠀
По факту мне воспитание не позволяет
Юмор, хаха, смешно, я поц с талом
источник

K

Katulos⠀ in PHP
Artem Molotov
Юмор, хаха, смешно, я поц с талом
Заметьте, поцем я вас не называл, вы сами :)
источник

AM

Artem Molotov in PHP
Katulos⠀
Заметьте, поцем я вас не называл, вы сами :)
</irony>
источник

U

Unknown in PHP
Админ кстати добрейшей души человек)
источник

K

Katulos⠀ in PHP
У него выходной просто
источник

AV

Andrew Vorobiov in PHP
подскажите, а как делать DI в симфони если конструктор класса который мы хотим заинджектить содержит проперти значение которого мы узнаем только в классе куда инджектим.
например,
class TestCommand extends Command
{
   ...
   public function __construct(ReaderInterface $reader)
   {
       parent::__construct(self::COMMAND_NAME);
       $this->reader = $reader;
   }

   protected function execute(InputInterface $input, OutputInterface $output): int
   {
       
       $sourceDir = $input->getArgument('sourcePath');
     
       // Но sourceDir мы должны были передать в конструктор $this->reader!

       return 0;
   }
}
источник

AV

Andrew Vorobiov in PHP
стоит ли здесь вообще DI использовать?
источник

F

FOX in PHP
Andrew Vorobiov
подскажите, а как делать DI в симфони если конструктор класса который мы хотим заинджектить содержит проперти значение которого мы узнаем только в классе куда инджектим.
например,
class TestCommand extends Command
{
   ...
   public function __construct(ReaderInterface $reader)
   {
       parent::__construct(self::COMMAND_NAME);
       $this->reader = $reader;
   }

   protected function execute(InputInterface $input, OutputInterface $output): int
   {
       
       $sourceDir = $input->getArgument('sourcePath');
     
       // Но sourceDir мы должны были передать в конструктор $this->reader!

       return 0;
   }
}
источник

AV

Andrew Vorobiov in PHP
FOX спасибо, ознакомлюсь
источник

F

FOX in PHP
источник

F

FOX in PHP
выбирай что больше по душе
источник

AV

Andrew Vorobiov in PHP
ты две одинаковые ссылки скинул
источник

F

FOX in PHP
сорян, исправил
источник

VM

Volodymyr Melko in PHP
Andrew Vorobiov
подскажите, а как делать DI в симфони если конструктор класса который мы хотим заинджектить содержит проперти значение которого мы узнаем только в классе куда инджектим.
например,
class TestCommand extends Command
{
   ...
   public function __construct(ReaderInterface $reader)
   {
       parent::__construct(self::COMMAND_NAME);
       $this->reader = $reader;
   }

   protected function execute(InputInterface $input, OutputInterface $output): int
   {
       
       $sourceDir = $input->getArgument('sourcePath');
     
       // Но sourceDir мы должны были передать в конструктор $this->reader!

       return 0;
   }
}
сделай фабрику, которую и заинжектишь вместо сервиса.
ну и потом $this->factory->create($myParam)->doSomeStuff();
источник

VM

Volodymyr Melko in PHP
или, так ли важно ридеру иметь путь в конструкторе.
можно наверно сделать $this->reader->read($path)
источник

AV

Andrew Vorobiov in PHP
ну ридер тут для примера, вообще имею ввиду любой класс у которого есть обязательный параметр конструктора, без которого он не может существовать
источник

AV

Andrew Vorobiov in PHP
поэтому использование сеттеров не подходит
источник

AV

Andrew Vorobiov in PHP
а есть ли какие-то кейсы при которых DI лучше не использовать? А просто создавать объект класса через new
источник

VM

Volodymyr Melko in PHP
ну если вот прямо никак нельзя обойтись без параметра, то делай фабрику и создавай объект в рантайме
но в примере с ридером, я не вижу смысла делать путь конструктором, а передавал бы в метод. зачем мне миллион ридеров на каждую папочку, условно говоря. надо смотреть уже по ситуации
источник

VM

Volodymyr Melko in PHP
ну а через нью я бы создавал только DTO/VO/Entity всякие, но не сервисы
источник