• Headerless cms на базе Laravel можно/нужно?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Вы и из WordPress'а можете сделать headless. WP даёт отличный API. Я на своей практике реализовывал такой бекенд для сайта React и мобилок. Было больно - но не так, как писать всё с нуля. Заказчик получил удобную панель управления + огромный репозиторий плагинов WP.

    Что касается Laravel - да, можно. Но готовы ли вы тратить такое количество времени на то, что, по факту, уже есть в WP? Та же админка - ну вряд ли у вас получится сразу же сделать так удобно и красиво как у WP.
    Ответ написан
    Комментировать
  • На что опираться при выборе изучения RN и Flutter?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    кол-во вакансий у RN в раза 2-3 выше

    Это.
    Ответ написан
    Комментировать
  • Какой стек использовать для десктоп приложений в гос.предприятиях в 2023 году?

    vabka
    @vabka
    Токсичный шарпист
    Мне удобнее сделать всё на C#, .Net, WPF и в случае появления linux запускать всё под Mono.

    Ты под Mono не сможешь запустить приложение на WPF:)
    Тогда уж сразу лучше писать на Avalonia.
    Это раз.

    Два - если будет Linux, то очень велик шанс, что какой-нибудь особенный российский linux, у которого могут быть проблемы с совместимостью - нужно будет тестировать и как минимум писать инструкции по установке.

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

    В одной компании, в которой я работал, на отсутствие аккаунта в GitHub смотрели с подозрением. Т.е. при найме опытного разработчика их интересовал сам факт наличия аккаунта.

    Публичные репозитории и какая-то активность там скорее выступает как дополнительный плюс, этим можно просто себя лучше прорекламировать.
    Ответ написан
    Комментировать
  • Для чего webview?

    У вебвью есть куда больше прав к данным телефона/пользователя, особенно чувствуется на яблоках, которые не поддерживают кучу современных апи, например вибрацию.
    Ответ написан
    Комментировать
  • Laravel excel, как сохранить файл в проект?

    @random362
    Вроде бы в доке есть ответы на все вопросы
    1. Storing Files
    use Illuminate\Support\Facades\Storage;
     
    Storage::put('file.jpg', $contents);
    Storage::put('file.jpg', $resource);

    2. Mail#attachments
    /**
     * Get the attachments for the message.
     *
     * @return array<int, \Illuminate\Mail\Mailables\Attachment>
     */
    public function attachments(): array
    {
        return [
            Attachment::fromStorage('/path/to/file'),
        ];
    }


    такой код, он сразу отправляет файл на загрузку

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

    @kudry
    Тоже столкнулся с проблемой валидизации телефонных номеров.
    Телефоны берутся с участников вебинаров, на которые записываются люди из очень разных стран.
    Соответственно, со всеми предыдущими схемами возникают проблемы:
    1) а что если телефон с Украины (не +7-, а +38-)? А из Казахстана? А США (1-)? А Уганда ( +233-)? (из Уганды, правда, пока слушателей не было, но все впереди).
    2)В разных местностях приняты самые невообразимые способы разбиения телефона на группы цифр:
    8(8888)8-88-88-88 например. или 888(88)88888-888. Да и какие угодно могут возникнуть в будущем.
    Поэтому вариант с "дефолтным разбиением типа "8(888)888-88-88 ну совершенно не катит.

    Соответственно, я придумал следующий валидатор:
    1) В начале могут быть пробелы, после них может быть "+" (а может и не быть)
    2) Дальше должна идти группа цифр в количестве от 10 до 14 (мне нужны номера в международном формате; но если кому-то нужны более короткие - можно исправить диапазон длин).
    3) Поскольку я не знаю, как люди группируют цифры - до и после каждой цифры может быть один из 8 знаков ("-", " ", "_", "(", ")", ":", "=", "+"). Это значит, что между двумя цифрами могут быть любые два из этих знаков.

    В итоге получилось очень коротко и понятно )) :
    /^(\s*)?(\+)?([- _():=+]?\d[- _():=+]?){10,14}(\s*)?$/

    Съедает следующие телефоны:
    +7(903)888-88-88
    8(999)99-999-99
    +380(67)777-7-777
    001-541-754-3010
    +1-541-754-3010
    19-49-89-636-48018
    +233 205599853
    Ответ написан
    1 комментарий
  • Нужен ли отдельный linux user для сайта?

    ValdikSS
    @ValdikSS
    Нужны отдельные unix-пользователи на сервис/проект/сайт, иначе в случае взлома сайта А будет возможность читать и модифицировать файлы сайта Б, т.к. все файлы принадлежат www-data.

    Отдельные пользователи нужны всем сервисам, которые так или иначе взаимодействуют с файлами. В случае PHP это php-fpm (или другой исполнитель) — у каждого сайта должен быть свой пул со своим пользователем. Всё, с чем взаимодействие ведётся только по сети/сокету и имеет правильное разделение привилегий (базы данных), должны работать от своего (стандартного) пользователя.

    В случае веб-сервера также уместно разделить статические данные от кода: картинкам и .js-файлам следует назначить www-data, чтобы веб-сервер мог их прочесть и раздать, а php-код любого сайта при этом не мог эти данные модифицировать. Верно и в обратную сторону — веб-сервер не сможет отдать ваши .php-файлы без их исполнения в случае некорректной настройки веб-сервера.
    Ответ написан
    Комментировать
  • Как можно улучшить организацию дев окружения и деплоя при разработке библиотеки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Докер.

    Вообще очень странно, что вы так долго могли усидеть на такой неудобной конструкции.
    99% разработчиков тестируют код локально, ничего никуда не "синхронизируя" и не "заливая".

    Железо при этом не имеет значения, а окружение как раз задается докером.
    Правда, говорят что под виндой (и, вроде бы, маком) какие-то до сих пор проблемы с докером, но в целом это совершенный уже мейнстрим.
    Если надо просто поколупаться в небольшом кусочке кода, то я запускаю встроенный сервер.
    Но для рабочих проектов - уже много лет только докер (но разрабатываю я под линуксом).

    Как вариант - можно попробовать Continuous Integration, который весь этот список от пуша до composer update на удалённом будет выполнять автоматом.
    Ответ написан
    6 комментариев
  • Какой пет проект можно реализовать на Java?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Я не представляю как можно спрашиваьт у кого-то какой пет проект себе сделать.
    Все равно что спросиьт "каким хобби мне увлечься" и прослушать лекцию что ролики круче прыжков с парашютом, а настолки мастер оф гезеринг и Д&Д вообще разные вселенные.

    Придумайте себе тулзу/сайт/прогу, которая бы лично вам была интересна/полезна и развивайте ее.
    Когда-то таким пет-проектом был собственно линукс
    Ответ написан
    Комментировать
  • Установка пакета paybox без composer?

    vabka
    @vabka
    Токсичный шарпист
    Собирай через composer на машине, где он доступен.
    Затем загружай результат вместе с vendor на хост.
    Ответ написан
    4 комментария
  • Какими наводящими вопросами деликатно определить, процветает ли в компании микроменеджмент либо нет?

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Прямо спрашиваешь, кто будет давать мне задачи и кто будет контролировать.
    Есть ли почасовой контроль какими-либо инструментами.

    Ваш вопрос про "какая оплата" - ВООБЩЕ не про это.
    Может быть даже, что в компании может быть несколько проектов/команд и на какой-то одном проекте сидит "эффективный" менеджер, который увлекается микроменеджментом.
    Ответ написан
    Комментировать
  • Как в каждый ответ в API добавить данные при выполнении определенных условий?

    @daniel_wesson
    Я бы действительно сделал через middleware типо AttachConfigToResponse
    public function handle(Request $request, Closure $next): Response
    {
        $response = $next($request);
    
        $json = $response->getData();
        $json['config'] = ...;
    
        $response->setData($json);
    
        return $response;
    }
    Ответ написан
    1 комментарий
  • Почему вторая функция выполняется раньше если стоит await?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Скорее всего, внутри changeType ты запускаешь какую-то асинхронную действию, но не ждёшь окончания оной. Без кода непонятно.
    Ответ написан
    2 комментария
  • Laravel. Как тестировать кэширование?

    Если кэшируются не сырые данные из базы, а данные сформированные для ответа - можно добавить кастомный заголовок информирующий о работающем кешировании. Какой-нибудь Age к примеру.

    Это в том числе позволит писать функциональные тесты без необходимости мокать кэш, и при этом понимать работает ли он.
    Ответ написан
    Комментировать
  • Как максимально быстро добавить огромное количество записей в БД без дублей?

    Frostealth
    @Frostealth
    Backend Developer
    Как вариант: отфильтровать `$numbers` на стороне PHP и вставить пачкой.

    // избавляемся от возможных дубликатов
    $numbers = collect($numbers)->unique();
    // pluck('num') вернет нам список значений атрибута num, а не список моделей
    $existingNumbers = Model::query()->whereIn('num', $numbers->toArray())->pluck('num');
    // с помощью diff получаем элементы, которых нет в $existingNumbers
    $newNumbers = $existingNumbers->diff($numbers)->mapWithKeys(function ($value, $key) {
        // ['one', 'two'] => [['num' => 'one'], ['num' => 'two']]
        return [$key => ['num' => $value]];
    });
    
    Model::query()->getConnection()->transaction(function () use ($newNumbers) {
        Model::query()->insert($newNumbers->toArray()); 
    });


    При очень больших данных в БД нужно вытаскивать из БД чанками (пачками определенного размера, например по 500 000), а не сразу все.
    // избавляемся от возможных дубликатов
    $newNumbers = collect($numbers)->unique();
    Model::query()->toBase()->whereIn('num', $numbers->toArray())
          ->chunk(500000, function ($existingNumbers) use (&$newNumbers) {
               // с помощью diff получаем элементы, которых нет в $existingNumbers
              $newNumbers = $newNumbers->diff($existingNumbers);
          });
    
    // ['one', 'two'] => [['num' => 'one'], ['num' => 'two']]
    $newNumbers = $newNumbers->mapWithKeys(function ($value, $key) {
        return [$key => ['num' => $value]];
    });
    
    Model::query()->getConnection()->transaction(function () use ($newNumbers) {
        Model::query()->insert($newNumbers->toArray()); 
    });


    Также можно воспользоваться ON CONFLICT, если СУБД поддерживает подобное. Например, у SQLite - ON CONFLICT DO, у MySQL - INSERT IGNORE. Это позволит избавиться от выгрузки данных из БД, что уменьшит потребление памяти приложением и сократит количество запросов.
    Laravel имеет для этого метод Query::insertOrIgnore(), который будет глушить все ошибки от некоторых БД, но для некоторых не поддерживается. Поддерживаемые БД: MySQL, SQLite, PostreSQL.
    Необходимо, чтобы на атрибут `num` в БД стоял constraint unique, иначе БД просто вставит дубликат.
    $numbers = collect($numbers)->unique()->mapWithKeys(function ($value, $key) {
        return [$key => ['num' => $value]];
    });
    
    Model::query()->getConnection()->transaction(function () use ($numbers) {
        Model::query()->insertOrIgnore($numbers->toArray());
    });


    Индексы и explain изучить не помешает. Размер чанка подобрать по возможностям железа.
    Индекс на num значительно ускорит выборку, но скорость вставки снизится.
    Так же отказ от ORM (Eloquent), объектов и использование голого SQL с PDO ускорит работу.
    На большие данные и нагрузки нужно мощное железо. Может потребоваться масштабирование и т.д.
    Ответ написан
    Комментировать
  • По какой причине выдает ошибка в TypeScript?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    А так?
    searhcField: keyof Post
    Ответ написан
    2 комментария
  • Какие порекомендуете сайты с набором элементов UI?

    scoffs
    @scoffs
    Frontend | C# | Student
    Я бы советовал посмотреть в сторону более современных UI библиотек, например, MUI или Tailwindcss
    Ответ написан
    Комментировать
  • Как получить второй id из url?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Просто добавьте все параметры которые есть в роуте.
    Используйте биндинг, что бы сразу в параметре получить объект.

    public function productPage(Category $category, Product $product){
        // $currentProduct = Product::find($product); это уже не нужно
        // В переменной $product уже будет объект
        return view('product', compact('product'));
    }
    Ответ написан
    Комментировать