Сергей
Какую?
<argument type="service" id="logger" on-invalid="null"/>
Сергей
https://symfony.com/doc/current/service_container/optional_dependencies.html#setting-missing-dependencies-to-null
artem
Сейчас мозг сварится) кто-то делал авторизацию через разные сущности с lexik jwt? Например один вход для юзверя, другой для админа
artem
Юзер и админ это пользователи. Одна сущность должна быть
А если по бизнесу админ может с теми же данными быть юзером?
Maxim Kainov
Вадим
А с чего разные?
Ответь сначала почему одна
Maxim Kainov
Ответь сначала почему одна
Потому что для тех и других нужно выполнять одинаковые операции
Maxim Kainov
Упрощение
Maxim Kainov
Айдишник уникальный должен быть
Вадим
Потому что для тех и других нужно выполнять одинаковые операции
Но возможности у них разные. Если сантехник и повар выполняет одинаковые операции, ест, пьет и ходит в туалет, это не означает что это один и тот же человек
Anonymous
Говно, классы можно наследовать от одного абстрактного "пользователь", но администратор и клиент (юзер) должны быть отдельными сущностями
Anonymous
Ну, общие какие-то переменные могут быть
Anonymous
Можно и не наследовать, бога ради
Вадим
Ну, общие какие-то переменные могут быть
У сущностей не должно быть переменных
Maxim Kainov
Как ты это реализуешь
Anonymous
Как ты это реализуешь
Трейтами конечно
Anonymous
Но это другой вопрос
Вадим
А если у тебя повар будет еще выполнять обязанности сантехника?
А потом и бухгалтера, и няни. А потом он умрет, и все развалится так как он делал все
Вадим
Хорошо, проперти
И пропертей видно быть не должно. Только методы, а как там внутри все устроено, вот вообще не должно волновать клиентский код.
Вадим
Трейтами конечно
Зачем трейты?
Anonymous
Или ты про видимость уже перескочить успел
Вадим
Да ну? В энтити не должно быть например private $id?
Ключевое слово private ;) Оно не видно наружу. Внутри хоть private $fields=[]
Anonymous
Ну тогда да, ты прав, видны только методы
artem
Вообще не в ту степь ушли) сейчас бы реализацию по jwt найти, или хотя бы схему понять. Я все ещё думаю что можно разрулить на ролях
Maxim Kainov
Зачем тогда тебе сущность и orm?
Сущность у тебя может быть структурой, с которой работают другие объекты. Но геттеры сеттеры лучше наверное все таки сделать на всякий случай )
artem
https://habr.com/ru/post/508936/
Просто красавчик! Думал сутки хоть что-то похожее буду искать
Dmitry
Просто красавчик! Думал сутки хоть что-то похожее буду искать
только в статье для обычных форм авторизации с jwt тебе это в принципе нафиг не нужно создай свой Authenticator в getUser $data = $this->jwtEncoder->decode($credentials); if($data['role'] === 'admin') { $user = $this->em->getRepository(Admin::class) ->find($id); } else { $user = $this->em->getRepository(User::class) ->find($id); } return $user; соответственно при логине в токен надо добавить соответствующий role
Юра
Можно сделать несколько юзер провайдеров
Юра
Один к примеру memory другой entity
Юра
Через chain provider
Юра
Или вопрос не о том?
artem
Или вопрос не о том?
С чейном. Логика как и думал. Распилю энтри и отпишу как мб
Сергей
вопрос не ясен)
Daria
можно добавить геттеры и обозначить их аннотацией internal (https://docs.phpdoc.org/latest/references/phpdoc/tags/internal.html), если найду первоисточник то скину
Dmitry
а на итоговую коллекцию тоже нет геттера?
Dmitry
(в качестве мозгового штурма) а если через рефлексию сделать проперти пабликами?
Вадим
Если есть такой метод, значит и есть метод который эти данные использует.
Вадим
Ну т.е. я предполагаю, что есть метод который по некоему значению выдает цену исходя из диапазонов. Вот его и нужно вызывать в тесте
Вадим
Тоесть на эти диапазоны никакой логики нет?
Вадим
Да при чем тут чтение, эти диапазоны которые сохранены где-то используются кроме как для отображения?
Dmitry
Да при чем тут чтение, эти диапазоны которые сохранены где-то используются кроме как для отображения?
я так понял, что пишутся в приватное свойство persist flush читается через дбал "где-то там в другом месте"
Вадим
я так понял, что пишутся в приватное свойство persist flush читается через дбал "где-то там в другом месте"
Получается, что от этих данных ничего не зависит, тогда зачем их тестировать? ;)
Dmitry
Нет смысла тестировать персистенс слой
ну пытается тестить метод добавления но результат прочитать не может, поскольку добавляет в приватное свойство
Вадим
Но кмк это фигня
Dmitry
Запрос в базу тогда ;)
как вариант. не юнит, а функциональный тест сфлушить результат, прочитать из бд, сравнить с эталоном
Dmitry
но вместо бубнов проще сделать геттер)))
Вадим
как вариант. не юнит, а функциональный тест сфлушить результат, прочитать из бд, сравнить с эталоном
Да вообще смотреть что в базу записалось не имеет смысла. Есть обьект, у него есть поведение, вот поведение и надо тестировать, а не внутренний стейт
Кирилл
Вообще в phpunit-е где-то есть методы тестирования закрытых свойств, но их в версии 9 кажется уже выпилили.
artem
Привет. А кто-то работал с knp translation behavior? Вроде бандл настроил, все работает. Вот пока хз как отдавать сущности с текущей локалью. Мб не нашёл ещё доки
artem
Разобрался?
Нет. Спал)
Юра
Ну я так понял оно по дефолту и так отдает в текущей локали
Юра
https://github.com/KnpLabs/DoctrineBehaviors/blob/master/src/Provider/LocaleProvider.php
Юра
Как установить текущую локаль в симфе читай доку симфы
artem
"id": 53, "title": "Miss", "translations": [ { "id": 56, "title": "ru тайтл", "locale": "ru" }, { "id": 55, "title": "укр тайтл", "locale": "ua" } ], "new_translations": null, "current_locale": "ua", "default_locale": "ua" что то не верится
insystema
Добрый день. Установил Sf4.4+sonata_admin3.65 locale 'ru'. В Admin классе в методе configureListFields настроил поле даты как editable. Окно календаря работает, но отображается на англ.яз. Как установить для окна календаря: 1) отображение надписей на русском языке; 2) заданную (не текущую) дату. Подробности: https://groups.google.com/d/msg/sonata-users/lqaNcqXjPA8/YuAo0FrRAgAJ Спасибо
insystema
Состав пакета sonata admin-bundle
insystema
Из примеров editable поля в List View в инете нашел очень далекое https://gitmemory.com/issue/sonata-project/SonataAdminBundle/5767/559738217 по образу которого с помощью {% extends '@SonataAdmin/CRUD/base_list_field.html.twig' %} {% block field_span_attributes %} {{ parent() }} data-clear="Х очистить" {% endblock %} в окне календаря изменил надпись с "X clear" на "Х очистить"
artem
сегодня день локализации)) добрался до переводов ассертов и тоже трабла. когда в translation.default_locale меняю языки то ошибки переводятся, добавил листенер чтобы задавать локацию $event->getRequest()->setLocale($locale); с доков все равно отдает с default_language. мб ктосталкивался?
Сергей
у меня такой код в сабскрайбере public function setLocale(RequestEvent $event): void { $request = $event->getRequest(); $locale = $request->getPreferredLanguage(); if ($locale !== null) { $request->setLocale($locale); } } работает нормально
artem
да, нашел.видимо старую доку читал, заменил листенер на субскрайбер и завелось
insystema
спс, попробую
artem
https://symfony.com/doc/current/session/locale_sticky_session.html для 5.1 точно работает
insystema
Зачем соната? Изиадмин же есть
Изи есть, но пока соната. Изи может быть в следующей редакции.