Vitaly
сейчас у тебя это работает, но ты хочешь, чтобы это контейнер сам резолвил?
Borys
Да
Vitaly
либо вариант с оберткой этих параметров в DTO, тогда ты сможешь объявить этот DTO, как зависимость контроллера (тем более, если у тебя потом будет больше появляться параметров, то очень даже кстати будет) Либо если хочешь, чтобы прям строки были, то придется сделать эти свойства публичными, тогда ты сможешь через контейнер их внедрить
Vitaly
но чтобы прям в конструктор подставлять их - так не получится
Borys
Если строки будут публичными, каким образом будет выглядить внедрение?
Vitaly
$container->set(YourController::class, [ 'class' => YourController::class, 'dependent_string' => 'my string' ]);
Vitaly
ну и конструктор в этом случае переопределять не надо
Borys
Спасибо.
Borys
Vitaly
либо можешь через callable injection, там создаешь контроллер через Yii::createObject(), и свойства устанавливаешь
Vitaly
http://www.yiiframework.com/doc-2.0/guide-concept-di-container.html#php-callable-injection
Borys
Зачем тебе внедрять параметр в контролер?
Чтобы не дергать его из контроллера
Dmitry
Чтобы не дергать его из контроллера
Логику я понял твою. Для чего этот параметр?
Borys
Там полный код контроллера выше же)
Dmitry
Там полный код контроллера выше же)
Ага. Я просто не особо понял почему этим сервисам нельзя внедрить данные параметры через di
Borys
Ага. Я просто не особо понял почему этим сервисам нельзя внедрить данные параметры через di
Если я правильно все понял, то можно внедрить объект и только его. Либо делать оверкилл и для передачи двух строк я предпочел свойства сделать публичными.
Borys
Там выше Виталий объяснял, почиьай если интересно
Ярослав
Ага. Я просто не особо понял почему этим сервисам нельзя внедрить данные параметры через di
Глянь на все варианты IoC, если прямо интересно Не лишь одним DI ограничивается инверсия управления https://habrahabr.ru/post/244517/
Dmitry
Глянь на все варианты IoC, если прямо интересно Не лишь одним DI ограничивается инверсия управления https://habrahabr.ru/post/244517/
вопрос то не а IoС, а в том что нафига задавать зависимость классу, если он от нее по сути не зависит?
Ярослав
Смысл? Мне DI нужен.
Самое интересное, что Боря просил DI, а ему Service Locator посоветовали :)
Dmitry
Приведи пример, поглядим, зависит или нет
вот его пример https://gist.github.com/za4me/abbdee604abfc7476395bd69940fd73e
Ярослав
Ещё не силён в терминологии и паттернах.
Глянь статейку, которую я выше кинул - все встанет на свои места )
Dmitry
Ещё не силён в терминологии и паттернах.
они на самом деле тонко отличаются, можно сразу и не понять )
Ярослав
они на самом деле тонко отличаются, можно сразу и не понять )
DI и SL тонко отличаются ?) Абсолютно разные подходы
Ярослав
Не вижу чот линк
https://habrahabr.ru/post/244517/
Dmitry
DI и SL тонко отличаются ?) Абсолютно разные подходы
делают по сути одно и тоже, но разными способами. И новичкам, ой как не очевидно это отличие
Ярослав
делают по сути одно и тоже, но разными способами. И новичкам, ой как не очевидно это отличие
Да, цель у них одна - создать слабосвязанную архитектуру , но реализация и использование абсолютно разные , хрен спутаешь, если хоть раз видел и то, и другое
Dmitry
Да, цель у них одна - создать слабосвязанную архитектуру , но реализация и использование абсолютно разные , хрен спутаешь, если хоть раз видел и то, и другое
наверное сейчас не долистаю, вчера или позавчера тут подобный пример обсуждали. Так что практика показывает что путают )
Dmitry
Dmitriy Kuts с Vladimir помоему дискутировали
Ярослав
Никто не спорит, что путают те люди, которые в вопросе не разбираются
Ярослав
Долото и лом ведь тоже путают )
Ярослав
Хотя хз кто
Dmitry
Хотя хз кто
ну так что по примеру то?
Ярослав
А нахера в контроллере конфиги ?
Ярослав
Dmitry
вот
Ярослав
Это называется толстые контроллеры , когда на них возлагают больше, чем нужно
Ярослав
На самом деле инжектить конфиг нужно в класс, который будет обрабатывать логику того дерьма, что там есть
Ярослав
У кого вообще были кейсы, когда di больше мешал, чем приносил пользу ?
Anonymous
Ярослав
Надо идти к симфонистам в чат :) Тут все за Service Locator )
Ярослав
Ахха
Dmitry
Надо идти к симфонистам в чат :) Тут все за Service Locator )
нет, просто не все понимают разницу ;) я тебе говорил
Borys
Если второе, то чем он толст?
Dmitry
Если второе, то чем он толст?
тем что он прокидывает параметры конфига.
Ярослав
Если второе, то чем он толст?
Тем, что берет на себя то, что не должен брать
Ярослав
У каждого должна быть своя зона ответственности Об этом гласит SOLID
Borys
т.е. мне нужно было создать сервис для приёма двух строк, делать в сервисе обработку, вернуть массив, а в контроллере его получить и сунуть в actions
Ярослав
А пример такой: Можно размазывать гавно по стенам, а можно по туалету Как бы разница огромная
Borys
Как по мне это чересчур
Borys
И между идеал кодом и чёрт ногу сломит должна быть середина
Borys
В некоторых случаях и AR дефолтного хватает.
Dmitry
И между идеал кодом и чёрт ногу сломит должна быть середина
ты же туда передаешь статическую информацию, которая уже известна и на зависит от пользовательского ввода. Зачем ее им указывать, когда они сами могут получить ее?
Ярослав
Мы не об AR сейчас говорим
Ярослав
С чего ты взял, что контроллер должен знать о конфигах класса Image ?
Ярослав
Инжекть сразу в класс, который занимается картинками
Ярослав
Ты получается лишние движения делаешь
Borys
Borys
Мне некогда полемику разводить)
Ярослав
Покажи, пожалуйста, сам код этих action'ов, image-upload
Borys
Код сам себя не напишет, спасибо за ссылки и советы.
Ярослав
Бро, тебе помочь хотят :)
Джинн
+1
Откуда ты возьмёшь шекели, поц? У тебя ведь даже нет партбилета!
Ярослав
Публичное api этой библиотеки заставляет тебя такое делать ?)
Ярослав
Тогда легче не заморачиваться, если code review у тебя не проводят
Роман
ребят вопрос сильно ли тормозит GridView ? Точнее не лучше ли использовать тот же foreach ?
Ярослав
Лол, напиши свой бенчмарк, мы поугараем)
Роман
Лол, напиши свой бенчмарк, мы поугараем)
хм..а как же другие фреймворки живут без него?
Роман
тот же laravel?
Роман
просто такие вещи притормаживают <?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'rowOptions' => function($model) { /** @var $model \common\models\Action */ if($model->isExpired()) { return ['class' => 'expired']; } return ['class' => 'working']; }, 'columns' => [ 'id', 'product_type', 'name', 'base1c_code', 'BeginDate', 'EndDate', [ 'format' => 'raw', 'value' => function ($model) { return Html::a('Редактировать',['action/update','id'=>$model->id]); }, ], ], ]); ?>
Роман
наткнулся в коде