Konstantin
да вроде ничего необычного, хотят снизить дублирование кода в каких-то местах
Konstantin
для этого заюзали трейты, потом придумали и общие аннотации вешать на этот трейт, а не копипастить в каждый класс
Nikolay
Konstantin
идея отчасти здравыми побуждениями обусловлена
Dmitriy
замели "типа дублирование под ковер"
Konstantin
Лучше уж дублирование, чем так
ну джуны иногда любят переугореть в чем-то, в чем еще плоховато разбираются. типа услышал что "код дублировать плохо", в силу малого опыта возвел это в абсолют и как давай угорать
Konstantin
частая проблема, пройдет с опытом
Konstantin
но я больше таких джунов ценю, чем тех, кому насрать, и он задачи решает квадратно-гнездовым способом. типа прочитл задачу как "добавить в 100 классов такой-то метод", ну и пошел это делать, даже не попытавшись задуматься, а нельзя ли как-то более обобщенно это решить
Юра
Когда тебе надо лазить по десяти трейтам чтобы понять какие там аннотации то как-то не очень
Юра
Лучше дублирование как по пне
Andrii
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
Павел
Null
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
то что внутри нельзя использовать я знаю, т.к. static указывает не на экземпляр класса, а на сам класс.
Null
А какой логический смысл несет static fn () => ?
Gleb
Konstantin
оптимизация!
Null
Ничо не понял, если честно. Как это работает ваще? Что делает static fn() ?
Null
Что делают стрелочные функции я знаю. Как помогает все разогнать статик?
Vite4eg
Мне кстати тоже это интересно: в конструкцию fn() => ''; прокидывается окружение. С ней static будет работать?
Gleb
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
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
минимально воспроизводимый. но если лень, я в течение дня попробую сам собрать
Konstantin
наоборот, этого много слишком)
Konstantin
мне чтобы у себя это завести, надо полчаса потратить
Павел
Gleb
Gleb
и постман коллекция
Konstantin
у меня из коробки не воспроизвелось
Vite4eg
ПОтому что внутри static fn() вызывается $this->skills
Строки 349-360
Konstantin
во, нашелся зрячий человек))
Павел
@oleynikgleb П.С. присмотритесь еще к map методу у самой коллекции
Gleb
Gleb
Gleb
Ещё раз всем большое спасибо за то что я стал чуточку умнее!)
RNSNC
Вопрос может не совсем по симфони, но явно ответ кто нибудь знает.
При использовании PhpStorm я случайно удалил папку ".ideа" и проект, грубо говоря, сломался. Всё подсвечивается коричневым фоном, не отображаются изменения Git. С файлами то всё в порядке, но теперь зайдя в любой файл, IDE подсказывает, что этот файл не относится к проекту. Или ещё не подгружает "src", который прописан в сервисах, как "App".
Как можно решить проблему?
Gleb
Вопрос может не совсем по симфони, но явно ответ кто нибудь знает.
При использовании PhpStorm я случайно удалил папку ".ideа" и проект, грубо говоря, сломался. Всё подсвечивается коричневым фоном, не отображаются изменения Git. С файлами то всё в порядке, но теперь зайдя в любой файл, IDE подсказывает, что этот файл не относится к проекту. Или ещё не подгружает "src", который прописан в сервисах, как "App".
Как можно решить проблему?
Э... вроде после удаления папки .idea запустить шторм, дождаться индексации проекта и донастроить.
не помню, может надо ещё запустить File-Invalidate Caches
RNSNC
RNSNC
попробовал File->Repair IDE, вроде помогло
Konstantin
ее нужно коммитить в гит за исключением пары файлов
Konstantin
тогда будет не так страшно ее удалять
Vite4eg
Konstantin
да
Павел
.idea?
Холиварная тема но да
Павел
да ничуть, однозначно надо
Ну там бывают настройки директрий, докера, хотя можно оввераднуть. Короче если это выдернуть и заигнорить - то норм.
Павел
Короче были вещи которые менялись на разных машинах. По разному тестят люди.
Konstantin
ну да, не всю папку
Konstantin
примерно так: https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
Павел
Опять таки это настройки шторма, нафига они например в репо, если 3 из 4 разрабов не в шторме (ну так, мысль от балды)
Konstantin
надо их заменить на нормальных :) или под угрозой расстрела заставить сесть на шторм