Задать вопрос
  • Можно ли использовать Gulp + Lavarel?

    neuotq
    @neuotq
    Прокрастинация
    В Laravel есть отличный инструмент для сборки фронта - Laravel Mix. Это обёртка над вебпак. Когда-то кстати он строился поверх gulp (и назывался Elixir).
    Вы можете отдельно использовать Gulp чтобы сделать чистые шаблоны и ваш фронтендер просто закинет js/css в нужное место и сделает декомпозицию шаблонов в blade шаблоны в Laravel.
    В целом сегодня немного странно использовать Gulp.
    Так же, если вы будете много работать с Laravel и в будущем, то я вам советую изучить Blade шаблоны и Laravel Mix и делать сами шаблоны полностью. Так же в Laravel есть инструменты для работы с фронтендом и в других вариантах, через API, через inertia и тп.
    Конкретный подход нужно определять вместе с командой в зависимости от задачи.
    Ответ написан
    6 комментариев
  • Почему в google analitics нет валюты белорусского рубля, BYN?

    neuotq
    @neuotq
    Прокрастинация
    Вопрос конечно немного посмешил, боюсь и рубль РФ уже скоро оттуда пропадет.
    А если без шуток, то просто не вошел в ограниченный список поддерживаемых локальных валют.
    Вот он:
    https://support.google.com/analytics/answer/620590...
    Ответ написан
    4 комментария
  • Существуют ли какие-то устоявшиеся паттерны, если я хочу всё приложение сделать в виде Laravel-Composer-пакетов?

    neuotq
    @neuotq
    Прокрастинация
    Насчёт конкретно подхода о котором вы говорите не скажу, скорее всего это плохая идея. Видел пару примеров несколько лет назад, бОльшая часть этих модульных подходов было нечто среднее между недомикросервисного подохода, с примесью разработки composer пакетов и элементами (концептуальными) плагинов wordpress.
    Или другой подход где "модули" laravel разделялись пространством имен и особой структурой, с некоторыми костылями для поддержки разделения кода. Этот подход формально лучше, но по факту обычное не нужное усложнение проекта. Но если вам интересно, можете изучить https://github.com/nWidart/laravel-modules
    Но как по мне, если уж и заморачиваться в подобном плане, то скорее наоборот отвязкой максимальной ядра приложения от любого фреймворка framework-agnostic подход.
    А так... Главный принцип, в целом кстати во многом пересекается с принципами микро сервисной архитектуры:
    есть определенная часть/логика приложения, которая может выполнять свою функцию независимо, которую могут писать разработчики независимо, можно выделить в отдельный пакет. Например, вы придумали свой крутой прокси изображений, и он как-то явно выходит за рамки вашей бизнес-логики приложения, более того возможно он пригодится в ваших других приложениях (или вы хотите поделиться с миром) делайте отдельный пакет.
    Ну и конечно у таких пакетов, могут быть зависимости в виде других пакетов.
    А вот прям делать декомпозицию приложения на пакеты, ради декомпозиции не стоит. Только если есть конкретный смысл что-то выделить.
    Примеры вот хорошие у Spatie https://spatie.be/open-source?search=&sort=-downloads .
    Там же можно посмотреть, как пакеты зависят друг от друга, например image от image-optimizer.
    Все их, достаточно популярные, пакеты вышли из практики разработки приложений для клиентов.
    Ближе к вашему примеру это проект Nova https://nova.laravel.com/ и тоже имеет кучу пакетов https://novapackages.com/ .
    Но здесь тоже нужно учитывать, цели самой Nova и почему такая организация. Сама Nova это как бы расширяемый прототип панели управления для CRUD приложений, она универсальная by design, поэтому и нужны доп пакеты, которые закрывают конкретные цели.
    Если у вас целевое приложение, то незачем его корневую бизнес логику куда-то выводить.
    Ответ написан
    1 комментарий
  • Как правильно реализовать прогрузку части данных в БД на Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Это обычный постраничный вывод, только здесь сами страницы подгружаются динамически: по мере скролла происходит запрос к серверу.
    Советую внимательно прочитать https://laravel.com/docs/9.x/pagination , там есть вся нужная вам информация
    Ответ написан
    Комментировать
  • Как получить ID элемента который содержит что-то?

    neuotq
    @neuotq
    Прокрастинация
    //Получаем коллекцию всех элементов с классом Text
    const elementsTextClass = document.getElementsByClassName('Text');
    
    //Проходим по всем элементам
    for (const element of elementsTextClass) {
    //Проверяем текстовое содержимое текущего элемента
      if (element.textContent === 'Bye, Wrld!') {
       //Выводим id родителя
        console.log(element.parentElement.id)
      //Дальше нам не нужно перебирать элементы выходим из цикла
        break;
      }
    }
    Ответ написан
    2 комментария
  • Не работают inline routes react/инлайн роуты реакт, как исправить?

    neuotq
    @neuotq
    Прокрастинация
    Проверьте верно ли вы сделали настройки вашего веб сервера. Потому как в момент использование приложения, там url строка в браузере динамически подменяется и лишних запросов к вебсерверу (помимо запроса данных ) особо нет. А вот при обновлении, либо прямом заходе по url идёт прямое обращение к нему. И если у вас не верно настроен Apache или nginx (или что там у вас), то не найдя страницу/правила/логику для example.com/login (а у вас там что-то вроде index.html и дальше только папки с асетами и тп) он и вернёт соответствующий результат что ничего не наёдено.
    Ответ написан
    3 комментария
  • Как найти сумму трех чисел в функции?

    neuotq
    @neuotq
    Прокрастинация
    Вы забыли указать параметры при вызове
    let multiply = getMultiply(1, 2, 3);
    Кстати, неплохо бы сделать проверку на это внутри вашей функции. Либо сделать параметры по умолчанию
    Ответ написан
    5 комментариев
  • Область видимости массивов. Как сохранить данные в fetch...then?

    neuotq
    @neuotq
    Прокрастинация
    Смотрите, во-первых вы немного нарушили логику потока данных у вас в приложении. С одной стороны, вы используете асинхронный fetch, с другой пытаетесь в синхронном режиме инициализировать ApexCharts. В момент создания options и ApexCharts да, там будет не то что вы ожидаете.
    Поэтому вам нужно либо асинхронно создавать всё: грубо говоря засунуть в то место, где у вас и цикл, либо немного иначе использовать ApexCharts.
    Инициализировать его с пустыми данными и текстом загрузка, а потом через updateSeries обновить график, тоже внутри того же .then (data => ...) после цикла, те асинхронно после того, как пришли данные.
    Читайте тут:
    https://apexcharts.com/docs/update-charts-from-jso...
    Ответ написан
    2 комментария
  • Как правильно распарсить дату с временными зонами в Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Зачем что-то парсить лишний раз. У вас приходят даты в UTC (Z в конце говорит об этом).
    Карбон отлично всё создаёт из этой строки
    $tm = Illuminate\Support\Carbon::create('2022-05-01T07:00:00.000Z');
    /*
    Illuminate\Support\Carbon @1651388400 {#4888
         date: 2022-05-01 07:00:00.0 +00:00,
       }
    */
    В базе мы тоже(надеюсь) храним в UTC
    <code lang="php">
    $tm->setTimeZone('Europe/Moscow');
    /*
    => Illuminate\Support\Carbon @1651388400 {#4887
         date: 2022-05-01 10:00:00.0 Europe/Moscow (+03:00),
       }
    */
    $tm->setTimeZone('Europe/London');
    /*
    => Illuminate\Support\Carbon @1651388400 {#4887
         date: 2022-05-01 08:00:00.0 Europe/London (+01:00),
       }
    */
    </code>
    Ответ написан
    5 комментариев
  • Как сохранить пользователя в БД, если пользователь совершил аутентификацию через ВК?

    neuotq
    @neuotq
    Прокрастинация
    0. В целом на уровне БД редко есть смысл запрещать пустой пароль.
    1. Инициируем создание объекта пользователя, заполняем поля, которые возможны (Имя, имейл если сетка отдает и тп)
    2. Сохраняем его куда-нить(ну допустим в локалсторе), создаем кукис, запоминаем что он незавершил регистрацию
    3. Пользователю показываем блокирующее любые другие штуки окошко/страницу с просьбой завершить регистрацию и ввести пароль.
    Ответ написан
    4 комментария
  • TypeError: Cannot read properties of null (reading 'role')?

    neuotq
    @neuotq
    Прокрастинация
    Оу, это печально известная ошибка на миллиард долларов, это если что не про конкретно вашу ошибку, а почему так можно делать.
    Здесь вы ищете роль
    const userRole = await Role.findOne({ role: 'user' });

    Если её нет, то соответвенно в userRole будет null, но далее вы без проверки обращаетесь userRole.role
    const user = new User({ username, hashPass, roles: [userRole.role] });

    Советую прямо сейчас начать использовать TypeScript, начните с простого пусть это будет проверка типов и отслеживание таких ситуации с возможным null.
    Это сэкономит кучу времени и кучу денег, значительно снизит непонятные ошибки на продакшене, которые сложно отловить.
    Ответ написан
  • Почему отрабатывает роут ошибки при сборке проекта, react-router-dom v6?

    neuotq
    @neuotq
    Прокрастинация
    Запускать нужно в веб сервере с соответствующими настройками.
    Когда вы разрабатывали приложение и запускали локальный сервер, который брал всё на себя.
    А так, допустим вы используете Apache там свои настройки, Nginx свои. Во множестве облачных сервисах нередко всё оптимизировано и почти ничего делать не нужно. Для условного Github Pages нужны свои небольшие манипуляции.
    Поэтому.
    1. Определитесь с веб сервером/площадкой где вы будете размещать проект
    2. Гуглите "Сервер/площадка react router settings" "Сервер/площадка react router deploymnet" и тп.
    Для локального у вас на компьютере нужно скачать какой-нибудь веб сервер(условный wamp или альтернативы), создать сайт там и тестировать.
    Ответ написан
    Комментировать
  • Откуда берётся next и action в кастомных мидлварах redux?

    neuotq
    @neuotq
    Прокрастинация
    Сама запись просто укороченный способ записать функцию которая возвращает функцию, которая возвращает функцию.
    function logger(store) {
      return function wrapDispatchToAddLogging(next) {
        return function dispatchAndLog(action) {
          console.log('action', action)     
          console.log('next', next)
          console.log('store', store)
          return next
        }
      }
    }

    Легче читается так
    const logger = store => next => action => {      
          console.log('action', action)     
          console.log('next', next)
          console.log('store', store)
          return next       
    }

    И вызвав logger(1)(2)(3); вы получете:
    action 3
    next 2
    store 1

    Далее, сама applyMiddleware уже умеет(с проверками и парочкой хитростей и ограничениями) прокидывать нужные параметры, запуская каждый middlware, на каждом этапе добавляя параметр.
    Условный пример, не про реальность, а так чтобы понятно:
    //Наш миддлвар
    const logger = store => next => action => {      
          console.log('action', action)     
          console.log('next', next)
          console.log('store', store)
          return next       
    }
    //другой наш миддлвар
    const logger2 = store => next => action => {      
          console.log('action2', action)     
          console.log('next2', next)
          console.log('store2', store)
          return next       
    }
    
    //Наша функция применялка, которая берет все миддлвары и будет с ними что-то мутить
    function applyMiddleware(...middlewares) {
      const param1 = 1;
      const param2 = 2;
      const param3 = 3;
      const do1 = middlewares.map(middleware => middleware(param1))
      const do2 = do1.map(middleware => middleware(param2))
      const do3 = do2.map(middleware => middleware(param3))
     //Возвращаем условно 
     return 1
    }
    
    //Где-то в коде мы вызываем applyMiddleware
    applyMiddleware(logger, logger2 )
    
    //В консоле получим
    //action 3
    //next 2
    //store 1
    //action2 3
    //next2 2
    //store2 1
    Ответ написан
    1 комментарий
  • JS в качестве БД?

    neuotq
    @neuotq
    Прокрастинация
    Сразу отмечу: писать свой велосипед, кроме как для получения личной практики - не советую. Будет бесконечное число подводных камней, костылей и тп, которые разработчики различных БД уже прошли.
    А так, если нужно простое решение советую обратить внимание на SQLite. Там не требуется отдельный сервис/демон у вас должна быть реализация под ваш язык/фреймворк/среду и она будет работать.
    Достаточно надёжное решение.
    PS отдельно отмечу, возможно, вы имели ввиду совсем другое.
    Ответ написан
    1 комментарий
  • Laravel sail как полностью удалить?

    neuotq
    @neuotq
    Прокрастинация
    Laravel Sail всего лишь обёртка с командами чтобы быстро развернуть удобное докер окружение вокруг Ларавел.
    Поэтому запускаете Docker Desktop и там можно посмотреть какие контейнеры и тп есть в системе. Там же можно быстро удалить.
    Ответ написан
    1 комментарий
  • Как использовать AOS, если скролл реализован в div элементе на странице?

    neuotq
    @neuotq
    Прокрастинация
    Сложно сказать, так нет вашего кода (с допустим моком вызова апи и подгрузки.) но в AOS есть метод AOS.refreshHard который автоматом вызывается в таких случаях. Если у вас по каким-то причинам автоматика не срабатывает, делайте это сами программно.
    Ответ написан
    Комментировать
  • Как сделать что бы Swiper с одинаковыми классами работали от одного скрипта?

    neuotq
    @neuotq
    Прокрастинация
    Swiper и подобные обычно вешаются на уникальный DOM элемент и потом возвращают объект, который ему соответствует. Вам тогда нужно просто пройти по всем элементам класса и повесить на каждый Swiper.
    //Получим все ноды у которых есть класс swiper
    let swiperNodes = document.getElementsByClassName("swiper");
    //Пройдемся по ним и повесим свайпер
    for (let i = 0; i < swiperNodes.length; i++) {
       new Swiper(swiperNodes[i] , {
         speed: 400,
         spaceBetween: 100,})
    //...
    }

    Ну примерно так.
    Ответ написан
  • Что изучать первым после JS, TypeScript или React?

    neuotq
    @neuotq
    Прокрастинация
    Начни с базовых штук, но усилить можешь любимым языком программирования.
    В вашем случае это JS. TypeScript - это тот же JS но обернут некоторыми фичами, а React использует JS(и/или TypeScript) вы будете на нём писать, соответственно не зная языка, делать что-то больше простых реактивных кнопочек будет сложно.
    Советую глянуть сюда
    https://ru.hexlet.io/webinars (там проскролить чуть ниже к "Бесплатные курсы"), там годные указания и начало базового пути.
    Ну и конечно же сюда: https://roadmap.sh/frontend
    Крайне не советую тупо учить React, вы быстро упретесь в стеклянный потолок условного "скриптокидди", и ничего толкового в любой продуктовой или крупной компании сделать не сможете, да и не возьмут (впрочем такие встречаются чаще чем хотелось бы, так что как-то пролазят хех).
    Не бойтесь объёма, идит шажками.
    Ответ написан
  • Возможно ли сохранить cookie для selenium, чтобы потом использовать их с прокси?

    neuotq
    @neuotq
    Прокрастинация
    Тут прямая зависимость от системы что у них на сервере. Есть те, кто относится к внезапной смене ip лояльно, есть кто не приемлет вообще. Ну и куча градаций, к примеру менять можно, если это не известный ip из серверных(не домашних) и тп и тп.
    Таким образом они видимо сохраняют на сервере ip с которого были установлены эти куки и отклоняют если не совпадает.
    Вывод - вы ничего не сделаете.
    Можно только с владельцами сервиса договориться, чтобы сделали для вас исключения и тп
    Ответ написан
    Комментировать
  • Как запретить доступ к определенному столбцу в таблице?

    neuotq
    @neuotq
    Прокрастинация
    В целом было нельзя.
    Но есть относительно новая фича
    https://dev.mysql.com/doc/refman/8.0/en/server-sys...
    Те можно вроде бы вычитать привелегии. Попробуй может у тебя получится. Точно работало для таблиц, у юзеров которым давали права на БД. Для столбцов не пробовал.
    Ответ написан
    Комментировать