Вадим
Nikolay
Nikolay
Сначала, чем проще тем лучше. Затем, если понадобится, то рефакторинг
Вадим
Aleksandr
ужас в таком месте работать)
Юра
Ну вот такое решение приняло руководство. Сам в шоке
Aleksandr
пора валить)
Юра
У них их так текучка была сейчас станет ещё хужк
Сергей
В классе с названием цена добавлять какие-то купоны это странно.
Класс тогда должен быть что-то типа Order. В нем должна быть ссылка на продукт с ценой и возможность добавлять купоны и иметь метод getPrice(DiscountCalculatorInterface $calculator). Думаю как-то так
Aleksandr
Владимир
Ну вот такое решение приняло руководство. Сам в шоке
"Вам шашечки или ехать"
Если шашечки и платят не х2 от рынка, то проще свалить
Ну вот нужно мне после время от времени переключиться, посмотреть видосик с чаем и т.п.
Вадим
Kirill
Я верю, когда-нибудь рекрутеры научатся читать описания чатов...
Aleksandr
Сергей
Привет. Подскажите, как сейчас в Симфони дела с ACL?
Как я понимаю, основной способ это этот бандл: https://github.com/symfony/acl-bundle? Может есть какие-то другие решения, этот кажется слегка переусложненным.
Воутеры и isGranted увы не подходят, у каждой роли разрешения на эндпоинты должны настраиваться динамически
Павел
Павел
Елнур
Елнур
Сергей
Я пока вижу вариант хранить роли для каждого пользователя в виде массива доступов, а-ля ['edit_entity', 'view_entity', ...] и потом проверять их в каждом экшене через isGranted или воутера
Сергей
Кратко, да )
Не поделитесь чуть более полной версией?)
Елнур
Щас
Елнур
Сергей
Елнур
Например, есть сущность статья, есть эндпойнт редактирование. Нужно ли проверять, что именно к этой сущности есть право на редактирование? Или редактирование вообще всех статьей
Сергей
Сергей
Только проверка на право дергать конкретный урл, или его отсутствие
Павел
Павел
Елнур
is_granted можно вызывать двумя способами:
- is_granted(attribute)
- is_granted(attribute, entity)
Павел
Павел
короче по факту это просто 2 атрибута
Елнур
а как внутри проверять - полностью ап ту ю... можно через роли пользователя, можно получать из отдельной таблицы acl, или согласно текущему состоянию сущности и т.д.
Елнур
к одному атрибуту у вас могут быть множество воутеров. Например, есть атрибут edit, один воутер может проверять по ролям, другой из асл таблицы, другой по другому и т.д.
Сергей
Павел
Елнур
Сергей
Елнур
Елнур
воутер пусть будет знать только про права и его логику
Сергей
Елнур
Елнур
думаю, вам лучше один раз посмотреть доки
Елнур
https://symfony.com/doc/current/security.html#access-control-authorization
Nikolay
Привет, у меня есть DTO, по данным которого нужно получить объект и сделать валидацию. То есть, нужно сначала провалидировать часть полей DTO, получить объект и на основе этого объекта еще провалидировать оставшуюся часть полей.
Получается, что нужно делать валидацию два раза: сначала провалидировать сырые данные, затем уже более сложные проверки. Из идей пока что сделать два отдельных ДТО, но может есть и другие варианты
Михаил
Михаил
Михаил
Плюс не путай валидацию и бизнес проверки - это разные слои
Nikolay
Так сущность внутри бд априори валидна
Сущность здесь только косвенно участвует, нужно проверить что-то на основе ее данных. Возможно, сейчас смешена валидация и бизнес проверки, но так сделано
Павел
Павел
Павел
Но это оверинижиниринг, который очень редко когда помогает
Павел
Бывает иногда надо, когда например в 1 запросе участвует 2 экшена
Павел
Но для валидации мудрить имхо не стоит
Михаил
Михаил
1. Валидируем что сам запрос корректен
2. Валидируем что действие возможно
Это нормально
Михаил
А лучше в сущности, если доменная логика лежит в ней (хотя это не всегда возможно)
Nikolay
Юра
Я бы не совмещал валидацию данных и бизнес правила
Михаил
Nikolay
Юра
По теме https://youtu.be/FbYcIqVmGRk?si=RFl27y4auC0mR_8J
Null
Podlodka PHP Crew — это серия онлайн-конференций для php-разработчиков с упором на практическую пользу.
Сессии проходят в удобное время утром и вечером, так что можно участвовать без отрыва от работы или отдыха.
Уже 30 сентября стартует новый сезон, где обсудим архитектуру:
- Как документировать сложные системы по модели C4, разберемся с Кириллом Сурогатовым (Oxagile);
- Как выбрать между RabbitMQ и Kafka для обработки большого количества сообщений, обсудим на конкретных кейсах с Михаилом Камориным (Skyeng);
- Лайвкодинг по Temporal — Алексей Гагарин, Павел Бучнев (Spiral Scout) наглядно покажут, как этот инструмент упрощает жизнь разработчикам;
- Как ускорить работу PHP-монолита с RoadRunner, поделится Владимир Плахотников (Yclients).
Каждый доклад — это готовое решение, которое можно внедрить в свой проект. Билеты и подробности на сайте: https://podlodka.io/phpcrew
А промокод сообщества php_crew_5_TOyrjx даёт скидку еще в 500 руб🥳
Ivan
Объясните пожалуйста
Какая разница между первым и вторым?
/**
* Constructor.
*
* @param string $nodeBin The path to the node binary /usr/bin/node
* @param array $nodePaths An array of node paths. /usr/local/lib/node_modules
*/
public function __construct($nodeBin = '/usr/bin/node', array $nodePaths = array())
{
Kirill
так там написано