Maks
Не было печали, апдейтов накачали
Maks
Как говориться
/*
Всем привет. Дайте подсказку как обновить версию самого npm с ubuntu 16.04?
/*
Искал но нигде толком не описано
Юра
npm u -g npm
Юра
Так не пашет?
/*
нет
/*
но я уже решил проблему
/*
пасиб)
/*
npm update
/*
npm u -g npm
потом npm install
/*
точно не скажу, долго сидел над этим точно уже не помню
/*
Жаль
та же проблема?
Котерина ☮
та же проблема?
Нет, просто всегда жалко, когда информация могла бы попасть в общий доступ, но не попала, потому что "разобрался сам, тему можно закрывать"
/*
ну да
/*
далее только сюда)
Dmitriy
Всем привет. Делаю регистрацию, сейчас в ней 7 шагов: проверка данных от пользователя, проверка уникальности email, верификации моб телефона через сервис и тд. Плюс добавляется логирование каждого шага пользователя, запись этих логов в кибану, и выдача ошибок пользователю. Все шаги выполняются последовательно и если шаг завершился с ошибкой, то процесс прерывается. При этом нужно фиксировать как технические ошибки, так и ошибки пользователя (например, неверно введён email). Текущая реализация меня не устраивает, тк из-за большого количества кода усложняется отладка каждого отдельного шага. Кто-н может подсказать паттерн или компонент симфони, который поможет выполнить такую регистрацию?
Maks
пфф, даже не ищи)
Dmitriy
пфф, даже не ищи)
Как тогда быть?)
Maks
пиши сам)
Юра
Сохраняй последний успешный шаг
Юра
Если бы у тебя был спа на вью посоветовал бы https://vuetifyjs.com/en/components/steppers/
Dmitriy
Сохраняй последний успешный шаг
как в этом случае сделать обмен данными между слоями? создать общий объект, наполнять его данными и передавать в каждый шаг?
Юра
Ну рассуждайте в рамках ооп
Юра
У тебя есть некий шаг
Юра
Это класс
Юра
У тебя есть некий контроллер этих шагов
Юра
$stepper = new FormStepper(); $stepper->addStep(new FirstStep()); $stepper->addStep(new SecondStep()); $errors = $stepper->process($request);
Юра
логику process уж сам придумай, у каждого все индивидуалньо очень
Юра
Можно пойти еще дальше и определить интерфейс сохранения $stepper->setStorageAdapter(new SomeStorage()); из степперра вызывай метожы к примеру $this->storage->saveCurrentStep() и т.д. у тебя получится набор методов, которые ты потом реализуешь к конкретном сторадже
Dmitriy
$stepper = new FormStepper(); $stepper->addStep(new FirstStep()); $stepper->addStep(new SecondStep()); $errors = $stepper->process($request);
похоже на цепочку обязанностей. пара идей появилось. спасибо! подумаю в этом направлении
Юра
Да похоже
Юра
Только в цепочке обязанностей там если не сапорт то дальше а у тебя дальше не надо если предыдущий не выполнился
Dmitriy
да, точно
Dmitriy
спасибо еще раз, пойду думать)
Юра
Вообщем подход такой что разбил на сущности, подумал какие между ними связи, кто за что отвечает и реализовал
Юра
Когда реализация сложная мне помогает сначала набросать пустые методы, потом их реализовать. Прямо пишешь в коде $step = $this->pickCurrentStep(); .... $this->saveCurrentStep() ... не думаешь сначала о реализации, описываешь словами грубо говоря. Потом когда описано, реализацешь каждый метод
Ivan
Всем привет! У меня проблема с RememberMe в Symfony 5.2.3. Используется новая система авторизации со своим LoginFormAuthenticator. В настройках firewall: always_remember_me: true. В LoginFormAuthenticator ставлю RememberMeBadge. Но почему-то кука remember_me не устанавливается. Кто-то сталкивался с подобным?
Ivan
Ivan
Ivan
Согласно документации этого Badge: Adds support for remember me to this authenticator. Remember me cookie will be set if *all* of the following are met: A) This badge is present in the Passport B) The remember_me key under your firewall is configured C) The "remember me" functionality is activated. This is usually done by having a _remember_me checkbox in your form, but can be configured by the "always_remember_me" and "remember_me_parameter" parameters under the "remember_me" firewall key D) The authentication process returns a success Response object Вроде всё выполнено
artem
всем привет) а может кто нибудь подкинуть идею как заставить jms serializer обрабатывать данные если я с базы их беру через getArrayResult? сейчас хочу оптимизировать запрос и когда вызывал getResult то было больше 100 запросов к базе, сейчас 7, но сериализатор ясное дело не срабатывает
Юра
Только я чет не пойму про какой сериалазйлер они говорят https://stackoverflow.com/questions/44482033/deserialize-array-of-object-using-jms-serializer
artem
Вот такое нашел $serializer->deserialize($json, 'array<T>', 'json')
та вот просто не пойму почему доктрина получает список айдишников и потом по каждому идет отдельным запросом, получается на 20 записей вместо 2х запросов 40. когда заменил getResult на getArrayResult то запросов стало меньше в разы и скорость в 2 раза увеличилась, но хорошо бы запустить сериалайзер, тк выводить лишние поля + нужно виртуальные свойства отдавать
Юра
Потому что надо делать джоин рилейшенов
Юра
Или обозначить рилейшн как fetch = "EAGER" тогда оно по идее будет автоматически джоинить, но будет делать это всегда поэтому лучше так не делать
Юра
лучеш писать DQL типо SELECT post, cat FROM Post p JOIN p.categories cat
Юра
и будет теперь один SQL запрос
Юра
Ну и юзать сериалайзер на больших списках вообще плохая идея слишком медленно
Юра
Делай пагинацию или что-то такое или вообще откажись от сериалайзера
Юра
У меня на практике не возникало проблем с сериалайзером при 20-30 записей на страницу, но все зависит от к-во связей и т.д. если у тебя у каждой энтити есть связи и там еще 20 энтитей то просто может вывалиться ошибка что память закончилась
artem
$result = $serializer->fromArray($data, Some::class, $context); пробовал сделать так, но сначала выдало ошибки на Exclude когда их поубирал выдало пустые объекты и экзепшн One of listeners must count and slice given target
Dmitriy
Как вариант, посмотрите в сторону машина состояний
Спасибо за подсказку, посмотрю в эту сторону
One
привет народ. кто нибудь делал приложение на симфони, когда statefull приложение превращается в stateless приложение. То есть все файлы в папке uploads должны быть вынесены на другой сервер, включая JS и стили ДЛя чего это, например мы пишем приложение, которое будет запускаться в докер контейнере, и если его нужно будет горизонтально масштабировать, то с этим проблем не возникнет, потому что по сути это stateless приложение
One
то есть архитектура так продумана, что можно без проблем развернуть еще одно такое приложение, а балансировщик нагрузки без проблем распределит трафик, а сессии, upload папка, стили, JS, без проблем будут работать на обоих контейнерах, так как все что изменяется вынесено на другой сервер
Юра
Делали
Юра
В чем вопрос то. Скажу сразу универсальных ответов нет скорее всего
Юра
Сессии сразу выноси в мемкеш какой-то
Юра
Сессии в файлах тормозят их даже на одном сервере надо выносить в мемкеш
jenia
Сессии сразу выноси в мемкеш какой-то
Слышу много про него а чем redis не лучше?
Юра
Можно редис
Юра
Мемкеш это олдскул
Юра
Вообщем главное не налажать с блокировкой сессии, особенно в СПА, а то параллельные апи запросы выстроятся в очередь
Юра
В редис хендлере кстати по-моему вообще нет бдокировки сессии
jenia
В редис хендлере кстати по-моему вообще нет бдокировки сессии
В Редис есть 1 поток и есть транзакции. Все зависит от драйвера который будет использован в symfony. Думаю там все ок с этим
Andrei
А нафига в spa сессии?
jenia
А нафига в spa сессии?
А люди делают! :)
jenia
Мне объямноли однажды что бы не сочинять что то новое
Юра
Ну внатуре в СПА сессия ж не нужна
Юра
Тупанул
jenia
Ну внатуре в СПА сессия ж не нужна
Можно и сессией пользоваться
Юра
Ну в натуре можно и с сессией же
Юра
Тупанул
Юра
Как ни крути все не так )
jenia
Как ни крути все не так )
Лучше с сессией если менять ничего не хочется на back. С jwt много мароки может быть