Konstantin
да вроде ничего необычного, хотят снизить дублирование кода в каких-то местах
Konstantin
для этого заюзали трейты, потом придумали и общие аннотации вешать на этот трейт, а не копипастить в каждый класс
Konstantin
идея отчасти здравыми побуждениями обусловлена
Dmitriy
замели "типа дублирование под ковер"
Konstantin
Лучше уж дублирование, чем так
ну джуны иногда любят переугореть в чем-то, в чем еще плоховато разбираются. типа услышал что "код дублировать плохо", в силу малого опыта возвел это в абсолют и как давай угорать
Konstantin
частая проблема, пройдет с опытом
Konstantin
но я больше таких джунов ценю, чем тех, кому насрать, и он задачи решает квадратно-гнездовым способом. типа прочитл задачу как "добавить в 100 классов такой-то метод", ну и пошел это делать, даже не попытавшись задуматься, а нельзя ли как-то более обобщенно это решить
Юра
Когда тебе надо лазить по десяти трейтам чтобы понять какие там аннотации то как-то не очень
Юра
Лучше дублирование как по пне
Roman
Всем привет! В раздел payload JWT-токена автоматом подтягиваются роли пользователя. Есть ли простой способ подтягивать туда не только явно объявленные роли, но и дочерние, которые прописаны в иерархии ролей? Например, если в security.yaml прописано: role_hierarchy: ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_MANAGER] чтобы в токене суперадмина был не только ROLE_SUPER_ADMIN, но и ROLE_USER и ROLE_MANAGER?
Юра
Есть. Распарсить ямл и засунуть роли в jwt?
Roman
С первой частью проблем нет. А как засунуть - свой JWTTokenAuthenticator написать?
Юра
У лексик бандла есть в доке
Юра
Ивентом по-моему
Юра
Естественно надо учесть что это все будет доступно на фронте
Юра
И возможно изменено
Юра
Мало ли
Roman
Мне как раз для фронта - там частично дублируется авторизация. Легаси )
Roman
Спасибо, буду искать.
Null
Драсьте. Задача: настроить один логгер в монологе, но чтобы он в зависимости от контекста логировал в разные файлы. Почему не завести несколько логгеров прямо в ямл: потому что мы метим контроллер интерфейсом loggable и лог должен выглядеть как SomeController.log
Павел
Драсьте. Задача: настроить один логгер в монологе, но чтобы он в зависимости от контекста логировал в разные файлы. Почему не завести несколько логгеров прямо в ямл: потому что мы метим контроллер интерфейсом loggable и лог должен выглядеть как SomeController.log
Сделайте свой хандлер, копипастой от StreamHandler, или отнаследуйтесь от него, или сделайте декоратор. И там определите логику установки stream в зависимости от context, context вроде есть в массиве record
Null
Декоратор наверное избыточен. Иначе все стрим хендлеры начнут делать лишние проверки. Лучше явно в конфиге свой укажу.
Gleb
Ребята, а можете, пожалуйста, объяснить. То ли я тупую ошибку где-то сделал, то ли с чем-то недоразобрался. Часть кода (сущность + метод контроллера) https://pastebin.com/s4nXg3fz Суть. В сущности есть маппинг объекта на массив (метод toArray()), используется местами array_map(static fn () => {}, $this->collectionAtObjectFields-toArray()) В контроллере получаю из доктрины массив объектов сущностей и делаю маппинг результатов на массив, который потом сериализуется в json. маппинг вида ['users' => array_map( static fn (User $user) => ['user' => $user->toArray()], $users )] в контроллере на вызове $user->toArray() ловлю потерю контекста (Using $this when not in object context) в части $this->collectionAtObjectFields->toArray() Если из маппинга в сущности убираю static - все работает. Но, static тут же должен относится к анонимной функции в коллбэке, почему массив для обработки не видит контекст $this?
Konstantin
в статик-функциях нельзя this использовать
Konstantin
иначе какая она статик-тооо. и идешка об этом отлично пишет. в блокноте программируете?
Gleb
в статик-функциях нельзя this использовать
Так вот у меня же $this не внутри статик, ide phpstorm, не ругает
Gleb
то что внутри нельзя использовать я знаю, т.к. static указывает не на экземпляр класса, а на сам класс.
Null
А какой логический смысл несет static fn () => ?
Gleb
А какой логический смысл несет static fn () => ?
замыкание. static, что бы память не жрало.
Konstantin
оптимизация!
Null
Ничо не понял, если честно. Как это работает ваще? Что делает static fn() ?
Null
Что делают стрелочные функции я знаю. Как помогает все разогнать статик?
Vite4eg
Мне кстати тоже это интересно: в конструкцию fn() => ''; прокидывается окружение. С ней static будет работать?
Konstantin
Что делают стрелочные функции я знаю. Как помогает все разогнать статик?
Static closures are rarely used: They're mainly used to prevent $this cycles, which make GC behavior less predictable. Most code need not concern itself with this. It has been suggested that we could use this opportunity to change the $this binding semantics towards only binding $this if it is actually used inside the closure. Apart from GC effects, this would result in the same behavior. Unfortunately PHP has some implicit uses of $this. For example Foo::bar() calls may inherit $this if it is compatible with the Foo scope. We could only carry out a conservative analysis of potential $this use, which would be unpredictable from a user perspective. As such, we prefer to keep the existing behavior of always binding $this.
Gleb
Мне только непонятно пока почему array_map( static fn () => {}, $this->collectionAtObjectFields-toArray() <- вот здесь теряется контекст и начинает работать, если я в строке выше уберу static, я же тут вне пределов замыкания )
Павел
если хотите сделать ход конем, сделайте переменную = $this перед этим и импользуейте ее. Думаю сработает
Gleb
Вы пытаетесь усидеть на двух стульях. Статик пишут, чтобы контекст не захватывать. А вы пишите статик и пытаетесь захватить
так внтури static fn () => {} я тут не использую $this. Я $this использую как array аргумент для array_map
Gleb
Хорошо, вот пример куска кода, где теряется $this 'skills' => array_map( static fn(Skill $skill) => [ 'skill_id' => $skill->getId(), 'skill_code' => $skill->getCode(), 'skill_name' => $skill->getName(), 'skill_level' => $skill->getLevel() ], $this->skills->toArray() ) он тут должен потеряться во втором аргументе array_map или нет?
Konstantin
интересный, кстати, вопрос. я спросонья еще не понял почему так, поиграюсь в течение дня
Konstantin
было бы классно какой-то минимальный пример на "поиграться" получить
Gleb
Тем не менее)
Konstantin
минимально воспроизводимый. но если лень, я в течение дня попробую сам собрать
Gleb
было бы классно какой-то минимальный пример на "поиграться" получить
https://pastebin.com/s4nXg3fz достаточно будет? или всю цепочку Entity, Manager, Controller скинуть?
Konstantin
наоборот, этого много слишком)
Konstantin
мне чтобы у себя это завести, надо полчаса потратить
Павел
https://pastebin.com/s4nXg3fz достаточно будет? или всю цепочку Entity, Manager, Controller скинуть?
И падает только на последнем, а остальные такие же ок?
Gleb
мне чтобы у себя это завести, надо полчаса потратить
спасибо, и простите, постараюсь подумать что минимально надо для воспроизведения. могу в репу публичную залить, там и фикстуры есть и докер образ
Gleb
и постман коллекция
Konstantin
у меня из коробки не воспроизвелось
Vite4eg
Тем не менее)
ПОтому что внутри static fn() вызывается $this->skills Строки 349-360
Konstantin
во, нашелся зрячий человек))
Павел
@oleynikgleb П.С. присмотритесь еще к map методу у самой коллекции
Gleb
ПОтому что внутри static fn() вызывается $this->skills Строки 349-360
Спасибо!) Я ещё и неправильно стектрейс симфы читаю оказывается.
Gleb
Ещё раз всем большое спасибо за то что я стал чуточку умнее!)
RNSNC
Вопрос может не совсем по симфони, но явно ответ кто нибудь знает. При использовании PhpStorm я случайно удалил папку ".ideа" и проект, грубо говоря, сломался. Всё подсвечивается коричневым фоном, не отображаются изменения Git. С файлами то всё в порядке, но теперь зайдя в любой файл, IDE подсказывает, что этот файл не относится к проекту. Или ещё не подгружает "src", который прописан в сервисах, как "App". Как можно решить проблему?
Gleb
Попробовал полностью удалить проект с IDE и заново открыть. Вроде что-то кеширует
в папке .idea как раз и лежат все служебные файлы по проекту. Сейчас у себя попробовал ещё раз, после переиндексации все норм.
RNSNC
попробовал File->Repair IDE, вроде помогло
Konstantin
ее нужно коммитить в гит за исключением пары файлов
Konstantin
тогда будет не так страшно ее удалять
Konstantin
да
Павел
.idea?
Холиварная тема но да
Konstantin
Холиварная тема но да
да ничуть, однозначно надо
Павел
да ничуть, однозначно надо
Ну там бывают настройки директрий, докера, хотя можно оввераднуть. Короче если это выдернуть и заигнорить - то норм.
Павел
Короче были вещи которые менялись на разных машинах. По разному тестят люди.
Konstantin
ну да, не всю папку
Konstantin
примерно так: https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
Павел
Опять таки это настройки шторма, нафига они например в репо, если 3 из 4 разрабов не в шторме (ну так, мысль от балды)
Konstantin
надо их заменить на нормальных :) или под угрозой расстрела заставить сесть на шторм