Юра
Он и обновить и удалить может
Юра
Это просто инкапсуляция кода с энтитями, чтобы можно было дергать откуда угодно
Юра
Некоторые на этом и останавливаются, а некоторые поверх еще делают сервисы
Юра
Я не любитель супер усложнять ибо потом когда возвращаешься к проекту который не видел пару месяцев, то матякаешь сам себя
Aleksander
это же просто аналог yaml framework: messenger: default_bus: 'command.bus' или как-то так. Смысл отдельно в таких методах?
это понятно, что тут какая то магия про конфиги, просто не пойму - у меня нет такого класса FrameworkConfig
Aleksander
А должен быть? Не все бандлы конфигурируются любым способом.
не знаю, просто хочу понять, как написать код из доки, чтобы заработало
Gleb
Он кстати скорее всего будет называться framework.php и лежать в самом ядре. Домой вернусь - поищу
Gleb
Именно его пока не нашёл. Вот собственно подобные файлы из ядра https://github.com/symfony/symfony/tree/6.1/src/Symfony/Bundle/FrameworkBundle/Resources/config
Aleksander
Именно его пока не нашёл. Вот собственно подобные файлы из ядра https://github.com/symfony/symfony/tree/6.1/src/Symfony/Bundle/FrameworkBundle/Resources/config
не понял. что именно сделать чтобы можно было писать такое: use Symfony\Config\FrameworkConfig; return static function (FrameworkConfig $framework) { ... } у мну ругается что нет такого, даже неймспейса Symfony/Config нет
Gleb
Прочитал подробнее, это пример конфига, который надо класть в /config/packages.
Gleb
В бандле такое делается через такой же конфиг для бандла, и его инклюд через dependencyInjection бандла.
Руслан 🇲🇨
Здравствуйте! При попытке выполнить запрос: $query = $entityManager->createQuery( 'SELECT partial u.{name} FROM App\Entity\Product u' ); Получаю ошибку: [Semantical Error] line 0, col 22 near '} ': Error: The partial field selection of class App\Entity\Product must contain the identifier. Код модели: https://pastebin.com/jePmEiZ3 Пожалуйста помогите.
Null
u.{id, name} - ошибка же написала. В запросе должен быть идентификатор сущности обязательно.
Руслан 🇲🇨
🙏
Kartulin
Привет.. Подскажите, есть какая возможность при создании джобы - проверять ее на уникальность? Типа "если в очереди уже есть такая джоба с уник. полем" - то не отсылать в очередь
Aleksander
спасибо! интересно, не знал. однако всё равно не смог добить: класса Symfony\Config\FrameworkConfig как не было, так и нет, а если не указывать тип, то система не может определить какую зависимости надо: Could not resolve argument "$framework" .... You must typehint it....
Aleksander
потому что класс называется по имени файла конфига. т.е. если файл messanger.php, то будет Symfony\Config\MessangerConfig
тогда в доках ошибка? там в коменте указано имя файла, я так и делал
Aleksander
потому что класс называется по имени файла конфига. т.е. если файл messanger.php, то будет Symfony\Config\MessangerConfig
ну, и я не понимаю, откуда возьмётся этот неймспес и, тем более, какой то класс, который нигде не описан... что за магия такая?)
Aleksander
тогда в доках ошибка? там в коменте указано имя файла, я так и делал
в каом бы конфиге я такое не написал - будет подсвечивать что такого класса нет. и вариантов магии на эту тему я не знаю - по неймспейсам всё же композером делается еще "до этого"
Aleksander
Тогда этот момент я не знаю.
в любом случае, спасибо за помощь!)
Aleksander
Ещё момент который может быть. Возможно тогда все зависимые конфиги надо описывать в php, а не yaml
ну изначально я это пробовал в бандле сделать, там вообще всё вручную грузится и всё на пхп, так что врядли... видел сам код, который это делает и там не похоже что есть какая то магия с подстановкой чего то: https://t.me/symfony_ru/48495
Aleksander
В бандле не всё на пхп, там так же можно yaml/xml конфиги делать. Но да, инжектить надо вручную.
понимаю что можно) я про то, что я сам в своём бандле делаю все конфиги на пхп
Aleksander
в общем, врядли в этом дело(что всё на пхп должно быть), ибо в последнем примере import в yaml и он работает - пытается загрзуить указанный пхп-конфиг, но не может найти для него зависимости или же падает, если указать несуществующий класс
Руслан 🇲🇨
u.{id, name} - ошибка же написала. В запросе должен быть идентификатор сущности обязательно.
При попытке выполнить: $test = var_dump($products); return new Response($test); ничего не происходит, а количество памяти используемое браузером только растёт.
Юра
Потому что слишком много данных
Юра
Твой вардамп посылают тонну текста
Юра
Браузер виснет
Юра
Еще наверное xdebug не стоит
Юра
Который переопределяет вардамп и лимитирует количество данных
Руслан 🇲🇨
А как вывести массив без тонны текста?
Юра
Тонна текста не в массиве а в энтитях
Юра
Проставить xdebug
Юра
Или не впрдампить
Юра
А использовать дебагинг
Юра
Или завардампь count(products)
Юра
Такой вардамп может еще и фпм подвиснуть
Юра
Возможно прийдется сделать рестарт пхп фпм
Dmitriy
Попробуй dump()
Юра
Да еще вроде какой-то симфонийский dump есть
Руслан 🇲🇨
Александр II
console.CRITICAL: Error thrown while running command "'app:test' --env=dev". Message: "Command "app:test" is not defined. Did you mean this? кэш командой чистил руками команду запускаю - ок, по крону падает ошибка создал тестовую команду (скопировал эту, и вместо кода вставил логгер и поменял название команды), она норм отрабатывает по крону куда копать, подскажите?
Александр II
юзер в кроне тот же? cd в папку проекта сделал перед запуском? типа: cd /path/to/project && ./bin/console app:test
"юзер в кроне тот же?" - другая команда, которая следом, работает все ок в кроне #Генерация фидов */1 * * * * php /var/www/app/bin/console app:generate --env=dev > /dev/null 2> /dev/null #Тест */1 * * * * php /var/www/app/bin/console app:test --env=dev > /dev/null 2> /dev/null
Александр II
Нашел проблему, проблема в зависимости в конструкторе только не понятно, почему по крону падает
Konstantin
даже если это стейджинг, то всё равно SYMFONY_ENV в prod должно быть выставлено
Александр II
а это точно ок, что env=dev ?
да норм, там не в этом была проблема просто проблема была с $_SERVER["PWD"] в логи ошибка не падала, ручной запуск - ок, а я заколебался руками все делать, написал makefile и там увидел ошибку Warning: Undefined array key "PWD" странно что в логи не падало и не отлавливалось
Руслан 🇲🇨
Здраствуйте! Пытаюсь установить Bootstrap. Выполнил команду composer require symfony/webpack-encore-bundle При попытке выполнить yarn install получаю ошибку: "yarn" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Пожалуйста помогите.
Null
У вас нет yarn
Null
npm i киньте.
Руслан 🇲🇨
npm i киньте.
Не понял.
Null
У вас нет пакетного менеджера yarn. Установите его, либо используйте npm. Если и его нет - ставьте уже что-нибудь.
Aleksander
всем привет! подскажите, как грамотно разделить в зависимостях несколько шин, типа command.bus и query.bus? (при том что дефолтная - event.bus) на уровне команд-хандлеров всё получилось - всё по докам. а вот что и как сделать чтобы в конструкторах указывать зависимость от конкретной шины - не пойму... попробовал, конечно для каждой сделать свой интерфейс(типа interface CommandBusInterface extends MessageBusInterface), но тут вполне понятная ошибка: TestCommand::__construct(): Argument #1 ($bus) must be of type TheSite\Base\Model\Command\CommandBusInterface, Symfony\Component\Messenger\MessageBus given сам вижу два варианта решения: 1) указывать шину явно для каждого зависимого сервиса в конфиге 2) наследовать для каждой шины класс и проставить их для каждой шины 1й варик совсем не нравица) 2й - так себе, терпимо, но вроде чутка костыльно подскажите, мб есть варианты получше? Спасибо!
Вадим
всем привет! подскажите, как грамотно разделить в зависимостях несколько шин, типа command.bus и query.bus? (при том что дефолтная - event.bus) на уровне команд-хандлеров всё получилось - всё по докам. а вот что и как сделать чтобы в конструкторах указывать зависимость от конкретной шины - не пойму... попробовал, конечно для каждой сделать свой интерфейс(типа interface CommandBusInterface extends MessageBusInterface), но тут вполне понятная ошибка: TestCommand::__construct(): Argument #1 ($bus) must be of type TheSite\Base\Model\Command\CommandBusInterface, Symfony\Component\Messenger\MessageBus given сам вижу два варианта решения: 1) указывать шину явно для каждого зависимого сервиса в конфиге 2) наследовать для каждой шины класс и проставить их для каждой шины 1й варик совсем не нравица) 2й - так себе, терпимо, но вроде чутка костыльно подскажите, мб есть варианты получше? Спасибо!
https://symfony.com/doc/current/service_container.html#binding-arguments-by-name-or-type такой вариант еще есть
Konstantin
я бы руками расставил в ямле
Konstantin
потому что мудрить с уникальными именами не хочется, в каждом сервисе зависимость удобнее называть $bus
Aleksander
я бы руками расставил в ямле
я типа как раз бандл пытаюсь сделать, который всё что надо "прописывает в конфигах", чтобы переиспользовать не прописывая вручную.... ну и, даже если писать в конфигах - всё равно получается что надо для кажого зависиомго это писать, нет? так что переопределить самы шини и дальше по их классам/интерфейсам - вроде самое лаконичное
Aleksander
потому что мудрить с уникальными именами не хочется, в каждом сервисе зависимость удобнее называть $bus
да, тоже по именам не хочет, ибо всегда можно забыть/ошибиться, лучше по типа всё таки
Konstantin
сделайте класс-обертку для шины, который проксирует все вызовы в шину
Konstantin
альтернативный вариант - унаследоваться от шины (если она не финальная)
Konstantin
пустой класс-наследник. оно, конечно, не обманет lsp, но автовайрингу поможет
Konstantin
чисто как хинт для контейнера
Aleksander
чисто как хинт для контейнера
да, так и делаю в итоге
Aleksander
сделайте класс-обертку для шины, который проксирует все вызовы в шину
можно подробнее, не сильно в курсе как это... и чем это лучше чем просто унаследоваться от шины?
Konstantin
это если шина финальная
Konstantin
ну типа (пишу с телефона, поэтому коряво) class FooBus implements MessageBusInterface { __construct(private readonly MessageBus $bus) {} public function foo(): void { $this->bus->foo(); } // и вот так все публичные методы шины
Konstantin
это будет более строго, тк нельзя подсунуть базовый класс шины вместо наследника как в случае с наследованием
Aleksander
это будет более строго, тк нельзя подсунуть базовый класс шины вместо наследника как в случае с наследованием
с наследованием, конечно подсунуть базовый можно будет, но при вызове конструктора всё равно упадёт, ибо там ожидается не базовый а наследник, так что тут вроде никак не выкрутишься
Konstantin
я бы на самом деле, наверное, это порешал через тэги и компайлер-пасс. типа помечаешь свой сервис "это клиент мессадж баса, ему нужна такая-то шина"