
Andrew
28.01.2018
09:55:53
@noh
@thatside
# controllers are imported separately to make sure services can be injected
# as action arguments even if you don't extend any base controller class
App\Application\Controller\:
autowire: true
resource: '../src/Application/Controller'
tags: ['controller.service_arguments']

Bohdan
28.01.2018
09:56:44
для хендлеров можно сделать аналогично, только тег указать, который написан у меня выше и другой путь
хм, сейчас ещё гляну исходники свои

Daniel
28.01.2018
09:56:54
https://www.jetbrains.com/mps/?fromMenu - кто нибудь такое использует?

Google

Daniel
28.01.2018
09:57:03
В проектах у кого нибудь*
Вот чо ему дать, чтобы он в базу данных не лез
Аналитики что делают обычно у вас? Диаграмки последовательности?

Bohdan
28.01.2018
09:59:23
вторая мидлвара - моя кастомная

Andrew
28.01.2018
10:00:23
@thatside
tactician:
commandbus:
default:
middleware:
- tactician.middleware.command_handler
стандартные конфиги

Andrew
28.01.2018
10:01:38

Bohdan
28.01.2018
10:02:11

Andrew
28.01.2018
10:03:03
ну как бы попробуй обьяснить что дизайн приложения это чуть сложнее чем структура базы и если юзать инструменты которые ты юзаешь, структура таблицы становится вторичной и на первый план выходят обьекты и взаимодействие между ними, которые вы должны смоделировать

Andrew
28.01.2018
10:04:05
@thatside
Добавил инфлектор, все - равно надо инжектить '@tactician.commandbus.default' в каждый контроллер ручками
eferences class "League\Tactician\CommandBus" but no such service exists. It cannot be auto-registered because it is from a different root namespace.

Bohdan
28.01.2018
10:04:46
а это уже приколы твоих контроллеров, похоже
ну и их регистрации

Andrew
28.01.2018
10:06:27
@thatside А еще, вот что выдает
The service "tactician.commandbus.default" has a dependency on a non-existent service "tactician.handler.method_name_inflector.class_name".

Google

Bohdan
28.01.2018
10:06:40
хе...

Andrew
28.01.2018
10:06:48
Я или конфиги где-то не так указал, или бандл неверно поставил
у меня симфони 4.0.4
Или этот бандл не идет нормально под симфони 4
И возможно было делать своей что-то.

Bohdan
28.01.2018
10:08:04
в исходной либе он есть, а в бандле нет
и я регал сам

Andrew
28.01.2018
10:09:21
@thatside сейчас попробую

Bohdan
28.01.2018
10:10:40
вот с контроллерами мне точно непонятно
там явно что - то не так с их регистрацией
у тебя вообще для них неймспейс выделен?
у меня 3.4,потому я проверить не могу нормально


Andrew
28.01.2018
10:10:58
Да.
Could not invoke handler for command App\Command\CreateUserBusCommand for reason: Method 'createUserBusCommand' does not exist on handler
@thatside
убрал инфлектор
# method_inflector: tactician.handler.method_name_inflector.class_name
и команда заработал, только если она конечно зарегестрирована в сервисе
app.handler.createuserbuscommandhandler:
class: App\Handler\CreateUserBusCommandHandler
tags: [{name: tactician.handler, typehints: true}]
autowire: true
@thatside и еще
Вот такое мне надо прописывать вообще для каждого контроллера
App\Controller\RegistrationController:
arguments:
- '@tactician.commandbus.default'
calls:
- [setContainer, ['@service_container']]
на каждый контроллер, и на каждый хендел, именно поетому я тут спросил как весь етот мусор выкинуть
ибо у меня только на етот сраный пакет ушло более 2 000+ строк в сервис файле

Bohdan
28.01.2018
10:19:47
чезанафиг...зачем тебе контейнер в контроллерах, если есть автовайринг?

Google

Bohdan
28.01.2018
10:20:28
вот этот конфиг пробовал?
MyBundle\Controller\:
resource: '../../Controller/*'
autowire: true
tags: ['controller.service_arguments']
попробуй допустим так
App\Controller\RegistrationController:
autowire: true
calls:
- [setContainer, ['@service_container']]
tags: ['controller.service_arguments']
про контейнер уже забудем пока
но автовайринг должен работать нормально
вот именно замени описание данного контроллера тем, что я дал

Andrew
28.01.2018
10:23:15
_defaults:
autowire: true
autoconfigure: true
public: false
App\:
resource: '../src/*'
App\Controller\RegistrationController:
autowire: true
calls:
- [setContainer, ['@service_container']]
tags: ['controller.service_arguments']
Class "App\Controller\RegistrationController" used for service "App\Controller\RegistrationController" cannot be found.
В контроллере
class RegistrationController
{
private $commandBus;
public function __construct(
CommandBus $commandBus
){
$this->commandBus = $commandBus;
}

Bohdan
28.01.2018
10:25:30
так у тебя явно с неймспейсами проблема
неймспейс и местонахождение контроллера какие?

Andrew
28.01.2018
10:28:08
Да, поправил, однако ComandBus все так же недоступен

Andrew
28.01.2018
10:28:22
у меня несколько контроллеров для регистрации
немножк запутался.
Cannot autowire service "App\Controller\RegistrationController": argument "$commandBus" of method "__construct()" references class "League\Tactician\CommandBus" but no such service exists. It cannot be auto-registered because it is from a different root namespace.

Bohdan
28.01.2018
10:29:56
а в composer.json psr-4 неймспейсы прописаны аналогично?

Andrew
28.01.2018
10:30:25
"autoload": {
"psr-4": {
"App\\": "src/"
}

Andrew
28.01.2018
10:35:41

Andrew
28.01.2018
10:36:33
"config": {
"preferred-install": {
"*": "dist"
},
"sort-packages": true
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
},
"scripts": {
"auto-scripts": {

Bohdan
28.01.2018
10:36:40
а версия tactician-bundle?

Google

Andrew
28.01.2018
10:36:55
"league/tactician-bundle": "^1.1",

Bohdan
28.01.2018
10:37:12
https://github.com/thephpleague/tactician-bundle/issues/95
вот это еще обсуждается
но вроде как должно работать, судя по последнему комменту
в конце концов
ты можешь сделать свой сервис League\Tactician\CommandBus
с алиасом на @tactician.command_bus или как там
я не знаю, почему оно у тебя не заводится само - у меня проблем таких не было
попробуй вариант с алиасом на сервис
League\Tactician\CommandBus: '@tactician.command_bus'
ну или как там у тебя

Andrew
28.01.2018
10:44:16
League\Tactician\CommandBus: '@tactician.commandbus.default'

Bohdan
28.01.2018
10:45:21
допустим так, проверяй

Admin
ERROR: S client not available

Andrew
28.01.2018
10:46:31
Да, теперь каждый контроллер имет доступ к CommandBus

Bohdan
28.01.2018
10:46:51
ну хоть одну проблему победили)
теперь теоретически можно выкинуть все объявления контроллеров и свести к одноому resource

Andrew
28.01.2018
10:47:35
Угу, пасиб) Теперь бы как-то автоматизировать процес регистрации command->handler
Ибо каждый раз вручную прописывать а потом следить за всем.
Там что-то было про addCompilerPass
В Kernel

Bohdan
28.01.2018
10:48:23
ну тут надо с инфлекторами играться
как у тебя в хендлерах называются команды и их обработчики сами?
я так понимаю, ты переводишь живой проект на sf4?

Andrew
28.01.2018
10:48:49
CreateUserBusCommand

Google

Andrew
28.01.2018
10:48:54
CreateUserBusCommandHandler
Я делаю оптимизацию)

Bohdan
28.01.2018
10:49:35
то есть, у тебя на одну команду - один хендлер, так?
именно класс

Andrew
28.01.2018
10:49:44
да
class CreateUserBusCommand
{

Bohdan
28.01.2018
10:49:59
и при этом в хендлере какой метод?

Sergey
28.01.2018
10:49:59

Bohdan
28.01.2018
10:50:08
или там __invoke?

Andrew
28.01.2018
10:50:18
@fes0r сразу видно что это
@thatside
class CreateUserBusCommandHandler
{
public function handle() {...}

Sergey
28.01.2018
10:51:10

Bohdan
28.01.2018
10:51:24
tags:
- { name: tactician.handler, command: Foo\User\RegisterUserCommand }
с таким тегом, да?

Andrew
28.01.2018
10:52:00
@thatside
app.handler.createuserbuscommandhandler:
class: App\Handler\CreateUserBusCommandHandler
tags: [{name: tactician.handler, typehints: true}]
autowire: true

Sergey
28.01.2018
10:52:09
@fes0r сразу видно что это
RegisterUserCommand достаточно, или даже Command\RegisterUser + Handler\RegisterUserHandler. Не нужно упоминать комманд бас лишний раз

Bohdan
28.01.2018
10:52:18
то бишь из примера -
<?php
class RegisterUserHandler
{
public function handle(RegisterUser $command)
{
// do stuff
}
}
аналогично, так?

Sergey
28.01.2018
10:52:29
а вообще - command bus не нужны

Bohdan
28.01.2018
10:52:49

Sergey
28.01.2018
10:52:58
от слова совсем. единственная польза от command bus это когда у тебя хэндлеры как экторы в отдельных процессах висят и вся связь через MQ
вот тогда да, тогда комманд бас решает проблемы маршрутизации и прячет всю эту подноготную

Andrew
28.01.2018
10:54:15
@fes0r
но ведь у нас есть еще:
1 консольные команды
2 - доктрин команды
3 - maker bundle commands
4 - twig commands
уверене еще омжно найти, если поискать