Как в laravel я могу выполнять тяжелую логику во времени компиляции?

|
aprixodko 2022-06-24 12:39:39
t_qrt 2022-06-24 12:34:27
Всем привет, поделитесь опытом кто как борется с проблемой по двойному нажатию на submit, чтобы не создавались дубли в базе !?
кроме очевидного js.

хранить таймштамп в базе и проверять

EgorGruzdev 2022-06-24 12:41:14
t_qrt 2022-06-24 12:34:27
Всем привет, поделитесь опытом кто как борется с проблемой по двойному нажатию на submit, чтобы не создавались дубли в базе !?
кроме очевидного js.

laravelrus-269800.jpg
на маршруте есть функционал блокировки валидация и возможно это поможет решить вопрос

P.S. найти в документации про данный функционал не удалось, если кто знает где об этом написано в доке поделитесь ссылкой

t_qrt 2022-06-24 12:44:13
EgorGruzdev 2022-06-24 12:41:14
на маршруте есть функционал блокировки валидация и возможно это поможет решить вопрос

P.S. найти в документации про данный функционал не удалось, если кто знает где об этом написано в доке поделитесь ссылкой

это не помогает

EgorGruzdev 2022-06-24 12:48:47
t_qrt 2022-06-24 12:44:13
это не помогает

я для особо спешащих в старом интерфейсе делал вот так, т.к. доказать что «блондинка/брюнетка» делает двойной клик было очень сложно, а функционал делает начисление денег:

<input type=»submit» value=»применить» class=»but» onclick=»if(this.dataset.click === ‘true’) { return confirm(‘Вы действительно хотите отправить запрос еще раз?’) } else {this.dataset.click = ‘true’; this.value=’в процессе’}»>

dekmabot 2022-06-24 12:52:16
t_qrt 2022-06-24 12:34:27
Всем привет, поделитесь опытом кто как борется с проблемой по двойному нажатию на submit, чтобы не создавались дубли в базе !?
кроме очевидного js.

https://laravel.com/docs/9.x/cache#atomic-locks

Артём 2022-06-24 13:02:17
t_qrt 2022-06-24 12:44:13
это не помогает

Ты пробовал? Драйвер кэша какой? Драйвер сессий какой?

Артём 2022-06-24 13:02:29
EgorGruzdev 2022-06-24 12:41:14
на маршруте есть функционал блокировки валидация и возможно это поможет решить вопрос

P.S. найти в документации про данный функционал не удалось, если кто знает где об этом написано в доке поделитесь ссылкой

https://laravel.com/docs/9.x/session#session-blocking

t_qrt 2022-06-24 13:20:13
Артём 2022-06-24 13:02:17
Ты пробовал? Драйвер кэша какой? Драйвер сессий какой?

Redis да попробовал не сработало

t_qrt 2022-06-24 13:21:51
EgorGruzdev 2022-06-24 12:48:47
я для особо спешащих в старом интерфейсе делал вот так, т.к. доказать что «блондинка/брюнетка» делает двойной клик было очень сложно, а функционал делает начисление денег:

<input type=»submit» value=»применить» class=»but» onclick=»if(this.dataset.click === ‘true’) { return confirm(‘Вы действительно хотите отправить запрос еще раз?’) } else {this.dataset.click = ‘true’; this.value=’в процессе’}»>

это js ((

mikech76 2022-06-24 13:24:02
может с архитектурой чтото не то?

обычно делается order , со своим id
на него приходит оплата.
2 оплаты на один ордер сделать физически не выйдет

любые начисления должны какимито документами прилагаться

t_qrt 2022-06-24 13:27:15
Есть вроде делают на уровне транзакции но я что-то не могу осилить логику его работы
mikech76 2022-06-24 13:28:15
д ане транзакциинужны,а уникальность записи (индекса)
Артём 2022-06-24 13:28:15
mikech76 2022-06-24 13:24:02
может с архитектурой чтото не то?

обычно делается order , со своим id
на него приходит оплата.
2 оплаты на один ордер сделать физически не выйдет

любые начисления должны какимито документами прилагаться

Чо это «2 оплаты на один ордер сделать физически не выйдет»? Частичная оплата бывает

GDXbsv 2022-06-24 15:06:00
Как в laravel я могу выполнять тяжелую логику во времени компиляции?
По аналогии с Symfony Compiler Passes.

Я просто хочу просканировать все классы, найти все аннотированные методы и сохранить/включить их в свой класс. Делать это постоянно очень дорого. Я хотел бы делать это только один раз во время сборки контейнера.

Артём 2022-06-24 15:55:26
GDXbsv 2022-06-24 15:06:00
Как в laravel я могу выполнять тяжелую логику во времени компиляции?
По аналогии с Symfony Compiler Passes.

Я просто хочу просканировать все классы, найти все аннотированные методы и сохранить/включить их в свой класс. Делать это постоянно очень дорого. Я хотел бы делать это только один раз во время сборки контейнера.

Нет в ларавел никаких сборок контейнера

Adelf32 2022-06-24 15:57:57
GDXbsv 2022-06-24 15:06:00
Как в laravel я могу выполнять тяжелую логику во времени компиляции?
По аналогии с Symfony Compiler Passes.

Я просто хочу просканировать все классы, найти все аннотированные методы и сохранить/включить их в свой класс. Делать это постоянно очень дорого. Я хотел бы делать это только один раз во время сборки контейнера.

так запускай скрипт во время сборки контейнера… ну или после(если там база данных нужна). Мы часто скрипты запускали сразу после деплоя до включения сервера в группу(еще в безконтейнерные времена)

tsparksh_bot 2022-06-24 16:02:31
GDXbsv 2022-06-24 15:06:00
Как в laravel я могу выполнять тяжелую логику во времени компиляции?
По аналогии с Symfony Compiler Passes.

Я просто хочу просканировать все классы, найти все аннотированные методы и сохранить/включить их в свой класс. Делать это постоянно очень дорого. Я хотел бы делать это только один раз во время сборки контейнера.

octane

GDXbsv 2022-06-24 16:02:34
Артём 2022-06-24 15:55:26
Нет в ларавел никаких сборок контейнера

эх контейнер есть а компиляции нет
спасибо

GDXbsv 2022-06-24 16:04:46
Adelf32 2022-06-24 15:57:57
так запускай скрипт во время сборки контейнера… ну или после(если там база данных нужна). Мы часто скрипты запускали сразу после деплоя до включения сервера в группу(еще в безконтейнерные времена)

Ну тут да только если городить свой собственный кеш и компиляцию через var_export

Adelf32 2022-06-24 16:05:46
GDXbsv 2022-06-24 16:04:46
Ну тут да только если городить свой собственный кеш и компиляцию через var_export

так и делал. таблицу с локалями(их у нас было 45) вар экспортил в файлы. а то там банальные запросы за локалями очень много жрали трафика к кешу

GDXbsv 2022-06-24 16:09:00
Adelf32 2022-06-24 16:05:46
так и делал. таблицу с локалями(их у нас было 45) вар экспортил в файлы. а то там банальные запросы за локалями очень много жрали трафика к кешу

Грусно и печально
думал должно же быть что то готовое
кейс то распространенный

А может можно как то найти все сервсисы с определнным интерфесом тогда и их инжектировать?

Adelf32 2022-06-24 16:09:46
вот странные вы явисты. с таким бэкендом как у вас вместо симфони и доктрины взять ларку и элоквент… это надо дгадаться)
Adelf32 2022-06-24 16:10:58
пойду почитаю про Symfony Compiler Passes. интересно же
GDXbsv 2022-06-24 16:11:42
Adelf32 2022-06-24 16:09:46
вот странные вы явисты. с таким бэкендом как у вас вместо симфони и доктрины взять ларку и элоквент… это надо дгадаться)

Да мне надо внедрить обработчики просто для экспешенов
Я не хочу руками прописывать каждый из них
хочу добавить и чтобы они сами подхватывались
а ларавел не я брал
Я уже плевался когда понял что невозможно его кеш использовать в контейнерах но ладно без кеша так без кеша

Adelf32 2022-06-24 16:12:00
а. ну это не бог весть какой рокет саенс там. ларка тоже кеширует свой конфиг сервис провайдера.
Adelf32 2022-06-24 16:12:11
но внедриться в этот процесс… врядли. надо глянуть
GDXbsv 2022-06-24 16:12:46
Adelf32 2022-06-24 16:12:11
но внедриться в этот процесс… врядли. надо глянуть

вот мне надо подготовить все и пусть кеширует после этого

GDXbsv 2022-06-24 16:14:15
laravelrus-269831.jpg
Я собственно в ларе новичок
Хочу просто перетащить логику которую в симфе делал
Adelf32 2022-06-24 16:15:31
GDXbsv 2022-06-24 16:11:42
Да мне надо внедрить обработчики просто для экспешенов
Я не хочу руками прописывать каждый из них
хочу добавить и чтобы они сами подхватывались
а ларавел не я брал
Я уже плевался когда понял что невозможно его кеш использовать в контейнерах но ладно без кеша так без кеша

руками как-то надежнее… я вот щас плагинами для IDEA/PhpStorm занимаюсь. там все надо прописывать в plugin.xml или где-нибудь еще. Никто ничего не подхватывает. Зачем эту излишнюю магию добавлять в проект?

GDXbsv 2022-06-24 16:19:05
Adelf32 2022-06-24 16:15:31
руками как-то надежнее… я вот щас плагинами для IDEA/PhpStorm занимаюсь. там все надо прописывать в plugin.xml или где-нибудь еще. Никто ничего не подхватывает. Зачем эту излишнюю магию добавлять в проект?

так все руками же моими и прописано)
А так например возьмем PHP8 attributes (те же самые аннотации)
Их тоже надо через рефлекции искать
И ка краз идея что прописал в дном месте что надо атрибут добавил и оно подхватилось и зарегистрировалось где надо
а не держать в голове что если вот я что то добавил то надо мне еще в 3 местах прописать. И не забыть удалить если удалил из 3 мест

Но это все вкусовщина да
Каждый делает как удобно

Adelf32 2022-06-24 16:20:33
это да. прописывание руками просто немного более явно, чем атрибут. но спорить моджно долго) не будем
dekmabot 2022-06-24 16:21:09
GDXbsv 2022-06-24 16:09:00
Грусно и печально
думал должно же быть что то готовое
кейс то распространенный

А может можно как то найти все сервсисы с определнным интерфесом тогда и их инжектировать?

из распространённого — я бы тоже в ci запихнул скрипт, но есть ещё scripts в composer.json, сама ларка и хелперы его активно используют.

Adelf32 2022-06-24 16:23:00
dekmabot 2022-06-24 16:21:09
из распространённого — я бы тоже в ci запихнул скрипт, но есть ещё scripts в composer.json, сама ларка и хелперы его активно используют.

он хотел хитрее. вклиниться в процесс создания кеша сервис провайдера. но вроде мало смысла в этом

dekmabot 2022-06-24 16:24:21
Adelf32 2022-06-24 16:23:00
он хотел хитрее. вклиниться в процесс создания кеша сервис провайдера. но вроде мало смысла в этом

согласен, если просто аннотации, то можно и ручками запускать из artisan по необходимости, но симфони — там больше магии в этом, плюс роутинг в аннотациях)

GDXbsv 2022-06-24 16:24:51
Adelf32 2022-06-24 16:23:00
он хотел хитрее. вклиниться в процесс создания кеша сервис провайдера. но вроде мало смысла в этом

Я просто увидел симфоневский контейнер внутри и думал по аналогии
Но уже понял что тут надо руками делать

Adelf32 2022-06-24 16:27:32
GDXbsv 2022-06-24 16:24:51
Я просто увидел симфоневский контейнер внутри и думал по аналогии
Но уже понял что тут надо руками делать

кстати если во время ошибки собирать твою коллекцию обработчиков — то вполне норм. это будет происходить достаточно редко

GDXbsv 2022-06-24 16:27:33
dekmabot 2022-06-24 16:24:21
согласен, если просто аннотации, то можно и ручками запускать из artisan по необходимости, но симфони — там больше магии в этом, плюс роутинг в аннотациях)

Да я просто в сервис провайдере буду дампить в фаил и брать из него если он есть
С инвалидацией конечно боль но еще и это решать меня уже пока что ломает

GDXbsv 2022-06-24 16:28:34
Adelf32 2022-06-24 16:27:32
кстати если во время ошибки собирать твою коллекцию обработчиков — то вполне норм. это будет происходить достаточно редко

ОНа собирается для каждого логирования
ибо я не знаю взарание есть ли ошибка внутри записи
логирование же оно потом во время нормализации начинает ошибки нормализовывать

Adelf32 2022-06-24 16:29:01
ну и зря)
GDXbsv 2022-06-24 16:29:17
Adelf32 2022-06-24 16:29:01
ну и зря)

что зря?)

Adelf32 2022-06-24 16:29:53
ты же понимаешь, что ошибки довольно редки при нормальном использовании. таким образом не стоит КАЖДЫЙ раз собирать большой конфиг для обработки ошибок. это можно вполне делать только когда нужно…
Adelf32 2022-06-24 16:30:01
но это уже детали реализации…
GDXbsv 2022-06-24 16:30:42
Adelf32 2022-06-24 16:29:53
ты же понимаешь, что ошибки довольно редки при нормальном использовании. таким образом не стоит КАЖДЫЙ раз собирать большой конфиг для обработки ошибок. это можно вполне делать только когда нужно…

Так потому я и хотел собрать его только один раз ибо зачем делать одно и тоже постоянно

GDXbsv 2022-06-24 16:31:17
Adelf32 2022-06-24 16:29:53
ты же понимаешь, что ошибки довольно редки при нормальном использовании. таким образом не стоит КАЖДЫЙ раз собирать большой конфиг для обработки ошибок. это можно вполне делать только когда нужно…

можно
но тогда пиздец получается
форматер будет ходить по всему проекту и искать что ему надо

GDXbsv 2022-06-24 16:31:57
GDXbsv 2022-06-24 16:31:17
можно
но тогда пиздец получается
форматер будет ходить по всему проекту и искать что ему надо

тестировать такое ад

GDXbsv 2022-06-24 16:32:56
а так у нас на вход массив на выход массив очень простой тест
а сборка зависимостей там логики нет тоже простой тест
смешаем и получаем комбинаторный взрыв и еще моками обмазываемся
romand 2022-06-24 17:14:43
mikech76 2022-06-24 13:24:02
может с архитектурой чтото не то?

обычно делается order , со своим id
на него приходит оплата.
2 оплаты на один ордер сделать физически не выйдет

любые начисления должны какимито документами прилагаться

Совершенно однозначно надо архитектуру чинить. Бэку вообще нет дела до того сколько раз нажали и на что))

AlexBer_q 2022-06-24 17:16:02
romand 2022-06-24 17:14:43
Совершенно однозначно надо архитектуру чинить. Бэку вообще нет дела до того сколько раз нажали и на что))

Тоесть бек должен доверять фронту?))

romand 2022-06-24 17:17:14
AlexBer_q 2022-06-24 17:16:02
Тоесть бек должен доверять фронту?))

То есть бэк должен полагать что с фронта может прийти любой мусор в тч и здонамеренный

AlexBer_q 2022-06-24 17:24:55
romand 2022-06-24 17:17:14
То есть бэк должен полагать что с фронта может прийти любой мусор в тч и здонамеренный

да и валидировать, чтобы курлом ничего не смогли подсунуть

|