
Evgeniy
23.02.2017
14:02:01
внутри configuration я уже объявляю
$container = new Container();
// some initialize
return $container;

Hell
23.02.2017
14:02:12
а, т.е. ты его не пихаешь в класс?

Evgeniy
23.02.2017
14:02:16
раньше делал так пока //some initialize не разрасталось
потом фигарил провайдеры

Google

Evgeniy
23.02.2017
14:02:50
Extending a Container смотри в доке
http://pimple.sensiolabs.org/#extending-a-container
потом и количество провайдеров очень росло
и не очень понятно было что оно там инициализирует
потом смотрел http://php-di.org/
потом пилил свой)
пока не закончил но уже юзаю, даже кидал ссылку сюда, мне полезные замечания писали)
тебе пока extending a container хватит) потом разрастетесь, будете выбирать что то типо php-di (удобно что с помощью reflection грузит в нормальном коде ничего писать не надо)
главная проблема в pimple была в следующем
в большом проекте количество классов очень дофига
и там местами отчеты в phpexcel строились иногда
и чтобы отобразить что то простое иногда иницилизировались контейнеры в виде функций для phpexcel, phpoffice и тд (которое вообще только для отчетов было)
все было разложенно по провайдерам, но pimple все что в коде провайдера написано вызывает

Google

Evgeniy
23.02.2017
14:09:54
мне хотелось чтобы определения (конфигурация) каждого контейнера лежала отдельно
например в разных файлах
запросили скажем $container['Magic'] подгружается Magic.php который возвращает объект Magic и этот объект отдается в то место где запросили)

Aleh
23.02.2017
14:12:13
мест, где вы юзаете контейнер как сервис-локатор должно быть крайне мало
поэтому единственное, что надо менять, когда переходите с одного на другой, это конфиг
он меняется за пару часов в самом худшем сценарии
когда прям ваще много классов
и легаси всякого
так что переход на php-di простая шляпа
вот если вы юзаете везде как сервис локатор, тогда придется пострадать

Evgeniy
23.02.2017
14:14:39
так тут provider он не конкретный объект создает как бы с помощью service locator
он возвращает много объектов
которые проставляются в сам pimple
в этом то и беда
например

Aleh
23.02.2017
14:16:20
ничего не понял

Evgeniy
23.02.2017
14:17:34
provider в примере
создает много контейнеров внутри себя

Aleh
23.02.2017
14:18:02
много контейнеров?

Evgeniy
23.02.2017
14:20:19
http://pastebin.com/RRQY19Yu

Google

Evgeniy
23.02.2017
14:20:28
вот такой ахтунг там в провайдерах
https://github.com/silexphp/Pimple/blob/master/src/Pimple/Container.php#L272
https://github.com/silexphp/Pimple/blob/master/src/Pimple/Container.php#L274
там просто вызывается функция регистр
каждый раз как регается провайдер и она создает всякие штуки
в небольшом проекте все ок
но в большом проекте где таких штук много, чтобы объявить все containerName занимает дофига всего
и причем больше половины из того что на определяли реально может не использоватся
сам код внутри функции конечно не вызывается
но сам процесс объявления имен всех объектов что есть в проекте
причем там не только твои классы объявлять, но и все что им необходимо из папки vendor
так понятней? или может я где то не так думаю

Aleh
23.02.2017
14:55:31
ну я слабо понял кейсы честно говоря
и такое ощущение, что делается что-то плохое
чего делать не надо
и с php-di вы это плохое делать перестанете просто
...
профит

Evgeniy
23.02.2017
15:22:06
не совсем)
там в php di как раз загрузка идет по требованию

Hell
23.02.2017
19:48:30
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md
вроде бы PSR-11 сейчас актуален

Google

Evgeniy
23.02.2017
19:49:29
https://packagist.org/providers/psr/container-implementation
из всего что реально юзает (мне попадалось) это symfony или php-di.org
php-di кстате имплементет container-interop
который раньше чем psr/container появился

Admin
ERROR: S client not available

Evgeniy
23.02.2017
19:53:32
и container-interop сейчас просто наследуется от psr/container в основном интерфейсе

Sergey
23.02.2017
19:53:52

Evgeniy
23.02.2017
19:54:24
ой
https://github.com/container-interop/container-interop/blob/master/src/Interop/Container/ContainerInterface.php
но там есть нюанс (не большой фейл)
но в целом да 100% совместимы

Sergey
23.02.2017
19:55:33
LSP нарушает?)

Evgeniy
23.02.2017
19:55:48
нет не настолько плохо)
хотя почти))
у них раньше в get было написано выкидывает NotFoundException ... и ContainerException (это интерфейсы но без префикса Interface на конце)
сейчас код в следующей версии они сменили тупо наследуются от psr/container/ConbtainerInterface
а там выкидываются экзепшены из psr/container которые

Sergey
23.02.2017
19:57:27
ну и эксепшены ж наследуются, так что все должно быть совместимым

Google

Evgeniy
23.02.2017
19:57:43
но в container-interop их Exception теперь от psr/container/exception наследуются
так что не должно нарушать LSP
но в целом container-interop/exception legacy хотя хз хз
по иерархии да
но они оставили лазейку непонятно зачем
ты опередил про наследуются, но с точки зрения ContainerInterface они никогда не вылятят)))
их для обратной совместимости скорей всего оставили

Sergey
24.02.2017
19:49:04
https://www.youtube.com/watch?v=p54Hd7AmVFU&list=PLGtm7trCCklGuwdTT6Ep7PPBnXTYFHBCX&index=1

Sergei
25.02.2017
07:19:55
[наброс] Верно ли я понимаю, что анемичные модели и active record - это вот прямо две крайности на одной прямой?

Sergey
25.02.2017
08:02:59
анемичная модель - это просто структура данных, которая описывает стэйт. И у тебя будут отдельные процедуры разбросанные по классам которые работают с этим стэйтом.
но ты можешь разделить стэйт таким образом, что бы сверху был один объект, который работает с этим стэйтом, и тогда можно представить что это стэйт этого объекта.... и тогда модель перестает быть анемичной.

Sergei
25.02.2017
08:06:22
Именно.
Скажем, я добавил в к этой самой структуре со стейтом методы peristency - теперь она умеет сама где надо сохраняться-загружаться. Она все еще анемичная?

Sergey
25.02.2017
08:06:58