Ответы пользователя по тегу PHP
  • Почему Laravel Schedule при задании интервала менее минуты скрипт пропускает минуту?

    @vism
    Вобщем в spatie/laravel-short-schedule тоже отказались люди от скрипта такого и делают так
    Я вот задумался и тоже наверное проще отказаться и для пары джобов делать так
    //Yes, we also decided not to use the package. We want to try use a task scheduling to run queue jobs with delay =)
    
    //For example (command):
    
    // run the job now
    dispatch(new ExampleJob);
    
    // and every 10 seconds this minute
    for ($i = 1; $i <= 5; $i++ ) {
    dispatch(new ExampleJob)->delay($i * 10);
    }


    А внутри джобы у меня unique интерфейс, чтоб не стакались они в случае чего
    Ответ написан
    Комментировать
  • Как организовать код в laravel?

    @vism
    подскажите как бы вы сделали, где и как мне пересчитывать сам заказ, после смены его списка товаров?

    у меня в голове
    1) создаю сервис класс
    2) инициалиирую его в конструкторе контроллера
    3) в методе контроллера одной строкой меняю данные корзины
    4) тут же ниже дергаю метод сервиса "обновить заказ"
    но с другой стороны, другому программисту ничего не мешает взять обновить данные корзины
    и все, не пересчитывать заказ... как обезопаситься от этого?


    Вот чес слово, светлая голова! думаешь о другом программисте.
    А всё просто, не надо в контроллере обновлять.
    Сделай сервис класс, где будут методы обновления и перерасчёта.
    И прямо там это делай.
    Т.е. метод обновить данные корзины, в котором будет обновление и вызов метода этого же класса для перерасчёта заказа.
    И не забудь всё это в одну транзакцию обернуть.

    А дальше лирика уже...
    но с другой стороны, другому программисту ничего не мешает взять обновить данные корзины

    Но это всёравно ему заговнокодить не помешает.
    Для того, чтоб не дать говнокодить нужно как минимум симфони там делать сложные тру структуры кода, которые писать в раз 10 дольше, чем сервис класс на ларавель. А ещё в 10 раз можно больше самому намудрить(если ты задал вопрос тут, на который я отвечаю, то тебе это пока рано).
    А ещё чтоб всё тру-тру было, надо тесты прикрутить, что всё это ещё умножит на х3 по времени и тоже не даст гарантий:)

    И самое главное, бизнес будет тебя просить как ты щас делаешь с риском что кто-то сделает баг и потом пофиксить его, чем делать всё по канонам в 10-30 раз дольше, дороже и увеличия очень сильно вход для программситов. Ну а баги там тоже будут, только намного более сложные и трудноловимые.
    За мои 12 лет я понял, что надо делать как хочет бизнес, а это максимально простой, понятный код и иногда фиксить баги. И ВСЕГДА вычищать технический долг.
    626035402f57d385357678.jpeg
    Ответ написан
    5 комментариев
  • Как навсегда переслать переменную из контроллера в представление?

    @vism
    учитывая код, просто фигачь $_POST['email'] прямо во view :) Хуже не станет
    Ответ написан
    2 комментария
  • Как правильно строить крупный проект?

    @vism
    Называется, услышал звон, да не знаю где он.

    1. Сервисный слой ты превратил в контроллер.
    Т.е. у тебя есть контроллер, а ты создал ещё один, т.к. где-то слышал, что нужны сервисы.
    Но, сервисы не шлют ответы, это внутренний слой для отделения логики.
    Ты можешь те методы вызвать через консоль, другие сервисы и т.п.
    Там должен просто генерироваться return, а сам response уже в контроллере (чтоб контроллер своб функцию выполнял). Валидацию реквеста кстати тоже надо делать не в сервесе.

    2. CategoryQuery - это вобще дичь дикая.
    Ты опять создаёшь дубликат, потому что услышал о репозиториях, и даже интерфейс. Вот я угараю с людей, кто везде пихает интерфейсы. Интерфейсы нужны там, где они нужны. Где будет 2+ наследователей интерфейса.
    Откуда у тебя тут наследники, если ты завязан на элокуент?
    А ноги от индусов репозитаристов. Не нужен репозитарий, Query и интерфейсы при работе в элокуент. Он сам в себе это всё уже содержит и все повторяющиеся вещи обёрнуты уже. find, first, firstOrNew и т.д.
    Так что используй элокуент и не переусложняй проект напрасно. Не надо делать сложно, делай просто.

    3. CategoryAction.
    Опять интерфейс...
    Вот это Экшн по сути у тебя сервис. Тут ты имеено перенёс бизнес логику создания и редактирования и возвращаешь ответ данного метода. Вот удали свой CategoryAction и перенеси методы в сервис.
    Ответ написан
    30 комментариев
  • Как сделать приватные поля в ларавеле?

    @vism
    Это потому что вы пытаетесь делать то, что не понимаете, но прочитали в умной книжке/статье, увидели на ютубе.
    джедай режим / Не нужно поля приватными делать в модели твоей.

    Не пытайтесь делать то, что не понимаете, через лет 5 будет понятно, а пока делайте как в доках написано, про простому.
    А бизнес логику в отдельные классы выносите. Пока ПО для боингов писать не начнёте, вам хватит.

    А если уж так важно всё тру вей писать, то лару сразу надо удалить, качать симфони и пытаться превозмогать там.
    Ответ написан
    7 комментариев
  • Как оптимизировать эти запросы на Laravel?

    @vism
    Это задание, а не вопрос.
    Ну, а если вопрос, то переписать код, чтоб формировался 1 запрос к базе и уже из него доставать данные.
    Никаких проблем, много раз так делал.
    Ну а если задание, то $200/h и за несколько часов составим нужный запрос:)
    Ответ написан
    1 комментарий
  • Как использовать ООП в контроллере Laeavel?

    @vism
    создаёте папку services и внутрь пихаете бизнес логику.

    61589552f391e310838520.png
    Ответ написан
    Комментировать
  • Какие существуют хорошие готовые решения для реализации data transfer object на php?

    @vism
    У меня было время, когда всё идеально делать хотелось. И делал. А потом смотрел результат, можно было в 10 раз быстрее сделать, т.к. функционал не рос за несколько лет.
    А те вещи которые сделал гибко и громоздко, и которые часто менялись, да удобно. да гибко.
    Но по факту если бы всё сделал по простому, но с умом. Те пару компонентов можно было по факту отрефакторить.

    Вобщем теперь я перешёл на модель от малого к большему.
    Делать так, что задача была выполнена и код был красивый, но без оверхеда.
    И внезапно DTO стали к месту, а не месиво, и VO стали в тему, а не куча кода непонятно зачем нужного.

    Вобщем рефакторинг по мере усложнения, тем самым и уровень вхождения в проекты намного ниже, и быстрее и кода меньше.
    Ответ написан
    Комментировать
  • Как понять из-за чего PHP иногда начинает медленно работать?

    @vism
    пользователей много?
    Сессии в файлах хранятся?
    Вангую я, что сессии у вам очищаются в это время.
    Ответ написан
    1 комментарий
  • Вопросы по организации кода в Laravel?

    @vism
    Тут слишком мало, чтоб говорить прям вот точно. Но в целом верно.
    Едиственное, если вам нужен exception чтоб сообщать пользователю, то лучше создать свой Exception и отлавливать его.
    Другими словами, если мы не хотите возвращать в качестве ответа внутреннюю ошибку, что лучше разгранисить
    Ответ написан
    Комментировать
  • Как предотвратить двойную обработку одной строки из базы?

    @vism
    нужно писать уникальный ИД и по нему выбирать строку.
    Т.е.
    1. в скрипте генерируете хэш
    2. делаете апдейт с этим хэшем
    3. по этому хэшу уже берете строку и отрабатываете.
    Ответ написан
    4 комментария
  • PHP-скрипт полностью не выполняется. Какая причина?

    @vism
    любая, да миллион причин от железа до софта и искать можете от пары часов до пары лет и не найти

    Поменяйте архитектуру, чтоб скрипт работал не 12 часов, а много мелких скриптов, которые будут добавлять пачки задач, выполняться, писать логи в базу

    через крон например
    Ответ написан
    5 комментариев
  • Можно ли в репозиторий использовать для сохранения обьектов?

    @vism
    А вы в курсе, чтоб из репозитария нельзя возвращать никакой Элокуент ВОБЩЕ
    Вы уверены, что слово роепозитари вам нужно, если не понимаете зачем, значит не нужно.
    Ответ написан
    Комментировать
  • Как сделать вызов JS функции при проверке php post запроса?

    @vism
    Оберни свой говнокод в документ рэди и всё заработает.
    Ответ написан
    Комментировать
  • Стоит ли переписывать полностью метод в данной ситуации?

    @vism
    Вобщем вы за ответом пришли туда, где 95% евда мидл-джуны.

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

    Просто создаете второй метод и общее тело (формирование запроса) выносите в третий приватный/протектид метод. (вот vista1x не поленился и даже код накидал примерный)
    В созданном методе заодно оставляете аргумент для сортировки.
    Нужен будет еще - создаете третий.

    Понимаете, что таких появится еще много - тогда уже меняете структуру, рефакторите.
    Ответ написан
    5 комментариев
  • Обработка json запроса в php?

    @vism
    array($request->all());
    Ответ написан
    Комментировать
  • Видеокурсы PHP С Русскими субтитрами?

    @vism
    Заходите в книжный, выбираете максимально толстую и свежую редакцию книги по ПХП и читаете.
    Ответ написан
    Комментировать
  • Undefined variable при проверке переменной?

    @vism
    if ($errors) не проверяет существование переменной
    Ответ написан
    Комментировать
  • Как решить проблему частичной загрузки изображений при парсинге?

    @vism
    file_get_contents попробуйте
    Ответ написан
    Комментировать