Rodion
std::mechanicus
The Ant
Проблема чот возникла. Роут с консоли матчит. с веб реквеста не матчит (постман). Запускается вебка через симлинку (индекс.пхп). Соответственно документ рут не тот, в котором лежат исходники. В этом может быть проблема? Или в чем тогда может?
The Ant
нету тулбара, апишка
The Ant
я не ставил
🦔
я не ставил
поставь
The Ant
да
Konstantine
Всем привет, ребят, отревьювте плиз вот этот PR: https://github.com/symfony/symfony/pull/42125
Иван
Всем привет, ребят, отревьювте плиз вот этот PR: https://github.com/symfony/symfony/pull/42125
https://github.com/symfony/symfony/pull/42125/commits/d518fb946d3efbd904b84a155971b13a5168e74c какие-то странные дифы
Иван
в ParameterBag и так константы с палкой
Иван
ну и главное, ты убрал встроенную типизацию string с метода has, но сделал это без уважения, ты даже не поставил аннотации, что это теперь string[]
Ivan
Всем привет! У кого есть есть опыт локализации страниц ошибок? Работаю с Symfony 5.3. locale автоматически проставляется по URL. Но вот если это страница ошибки, то этот механизм не срабатывает. Текст самой страницы ошибки я в принципе могу локализовать ifaми внутри самой страницы, но сами страницы используют layout всего сайта, и там перевод идет по локали по-умолчанию. Кто-нибудь сталкивался с этим?
Иван
404, например - это ж сабреквест и там по стеку реквеста должен быть более верхний доступен, откуда можно извлечь локаль
Denis
Привет Подскажите, на сколько правильно использовать сервисы в Symfony одновременно и как сервис и как объект DTO ? Либо лучше данные хранить где-то в отдельном DTO ? В коде ниже в сервис postingService передается $id, который там сохраняется и используется при вызове других методов сервиса И на выходе используются результирующие свойства сервиса (postingLength) для других операций в классе Class StorePostingExporter { public function __construct(PostingService $postingService) { $this->postingService = $postingService; } public function export(string $id) { $this->postingService->validate($postingId); $this->postingService->prepareDataForPostingExport(); if ($this->postingService->postingLength > 100) { ... } } }
Denis
совсем неправильно и в несимфони тоже
а как это правильнее сделать?
Иван
а как это правильнее сделать?
каждый раз передавать идентификатор параметром
Иван
а то представь, ты устанавливаешь параметр сервису А, работаешь, потом обращаешься к другому сервису В, он работает с этим же сервисом А, меняет параметр на свой и ты в неопределённости, какой параметр там остался
Alexander
$this->postingService->getPostingLength($postingId);
Alexander
if ($this->postingService->getPostingLength($postingId) > 100) {
Alexander
Данные в сервисе могут кешироваться, но в массиве по id
Иван
Данные в сервисе могут кешироваться, но в массиве по id
тогда не забывает про ресетбл интерфейс
Alexander
А лучше вообще кешировать повыше уровнем )
Denis
if ($this->postingService->getPostingLength($postingId) > 100) {
а если таких данных куча, то возможно их в сервисе одним махом посчитать и вернуть какой то DTO и потом с ним работать по геттерам?
Alexander
Вполне, достаточно prepareData... Заставить возвращать dto
Denis
Ясно, спасибо всем!
Юра
Блин кто-то сталкивался с таким дерьмом в апи платформ? https://github.com/api-platform/api-platform/issues/1971
Юра
Типо если ты сабмитишь энтити A и у неё есть OneToMany на энтити B то в процессе десериализации энтити В, оно по обратному рилейшену ManyToOne снова достает энтити A и перезаписывает его изменения которые уже были десериазилованы
Иван
понаставят апиплатформ, а потом энтити десериализируются
Юра
Да там какое-то странное стечение обстоятельств которое приводит к этому
Юра
Вообщем дебажил дебажил нашел место где происходит замена объекта, но почему это происходит не понял
Иван
Вообщем дебажил дебажил нашел место где происходит замена объекта, но почему это происходит не понял
бывает бандлы работают вместо тебя а бывает ты дебажишь бандлы, а работа стоит!
Юра
Это точно
Alexey Mishurovskiy
Ну я кстати так и не понял прелести апи платформы
Alexey Mishurovskiy
Обычного компонента сериалайзера вполне достаточно для апишек, ну может где то надо будет чуть больше поработать, но при этом нет головняка, если что-то в бандле не так
Alexey Mishurovskiy
или ещё лучше, отдельные dto для чтения, которые просто в json один к одному конвертятся
ну вариант, да, но у меня пока не было вопросов с неправильной сериализацией, может дальше будет что-то, посмотрим.. но по крайней мере я этим управлять могу
Иван
ну вариант, да, но у меня пока не было вопросов с неправильной сериализацией, может дальше будет что-то, посмотрим.. но по крайней мере я этим управлять могу
допустим ты ничего не знаешь о текущем проекте вот есть у тебя урл как быстро ты понимаешь весь контекст?
Alexey Mishurovskiy
допустим ты ничего не знаешь о текущем проекте вот есть у тебя урл как быстро ты понимаешь весь контекст?
Ну если там нет абстракции на абстракции, которая абстракцией погоняет то debug:router
Иван
ну это очевидный первый шаг дальше надо разобраться, какие данные из базы берутся и в какой формат конвертятся если там сериализатор, то насколько это очевидно?
Alexey Mishurovskiy
Ну я всегда стараюсь не усложнять если в этом нет необходимости. это ты к тому, что апи платформа стандартизована ?
Иван
я тут подумал, что в моей архитектуре неочевидности есть
Alexey Mishurovskiy
неочевидности есть всегда. в любой системе, не только в программировании. вопрос в другом насколько зашкаливает их абсурдность.
Юра
я вообще пришел к тому что надо как-то ограничивать уровень абстракций
Юра
только вот сложно это понятие измерить
Юра
каждая абстракция над абстракцией на порядок увеличивает сложность проекта
Иван
А как вы собираете дто?
при получении из базы данных массив через ... в конструктор
Иван
там приведение типов
Иван
и надо помнить, что '0' - это в пыхе ложь, а в яваскрипте - истина
Alexander
В чем выигрыш по сравнению с сериалайзером и группами сериализации?
Alexander
wat?
всё в порядке, расходимся
Иван
wat?
если проебать каст в бул, может интересно получиться
Юра
Кто так кастит
Maks
https://www.youtube.com/watch?v=et8xNAc2ic8
Maks
это была отсылка к этому докладу
Юра
Пиши !!'0'
Alexander
Тема с дто для чтения не раскрыта
Alexander
В том же проекте на запись дто выглядят отлично - запихал в них любую гадость, провалидировал и доволен. А в сущностях строгие типы и строгие проверки которые сыпят эксепшены из сеттеров. Но зачем делать 20 дтошек на чтение, если можно группы сериализации на сущности проставить?
A
Как небольшой плюс НЕ использования DTO - проще добавлять новые свойства. Не нужно править в нескольких местах, если весь массив из БД сериализуется.
Alexander
Ну да, и логика нормализации в одном месте - в нормалайзере. Если апи развесистое дто для чтения будет не один а миллион, и в каждом конструкторе будет дублирование. Непонятно.
Юра
Слой дто дает слой абстракции от уровня хранения. Но так как в обычных проектах уровень хранения с 99.99 вероятностью не будет меняться то ну ты понял
artem
всем привет) а кто юзал крайнюю версию пхп шторм, как там отключить индексацию вендоров? заодно мб у кого есть плагин под 2ю симфу?
Alexander
Alexander
Плагин в маркетплейсе symfony support. Его в настройках надо для проекта включить.
Alexander
Привет, есть вопрос по LexikJWTAuthenticationBundle. Я запустил команду lexik:jwt:generate-keypair и он создал два ключа, но кинул их в игнор. Это меня и ввело в ступор. Должен я пушить эти ключи или нет? У нас все запущено в докере в тесте и, получается, я должен добавить эту команду в докерфайл, чтобы он после каждого пайплайна в гите генерировал новый ключ или как? Может, есть какой-то флажок типа —if-not-exist?
Юра
Ты можешь сгенерить разные ключи для разных енвов
Юра
В бандле есть настройка где ключи
Юра
Продовские лучше в репе не хранить наверное
Alexander
Окей
Alexander
Спасибо