Задать вопрос
  • Как подгрузить разные формы в Blade Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Blade в любом случае это рендринг на стороне сервера.
    Любые динамические действия это JavaScript(за редким исключением).
    Значит далее вы уже решаете каким путём идёте.
    Можно идти популярным ныне путём создания компонентов и постройки интерфейса на реактивных фронтэнед фреймворках. При это не значит что нужно переписывать весь код, весь сайт делать SPA и тд. И react и vue, да и angular (и тд) вполне можно использовать и в более меньших масштабах, для небольших интерактивных компонентов. Laravel умеет со многими дружить практически из коробоки, в сети полно инструкций на этот счёт. И этот путь я вам советую.
    Второй вариант, более классический. Это решение на jquery (хотя можно и чистым js). Здесь вы можете делать например Ajax запросы к серверу, и там генерировать, в том же blade, часть select, а потом динамически подгружать.
    Кстати в Blade сейчас тоже появились компоненты (Laravel 7) советую почитать, возможно будет полезно.
    PS кстати на счёт первого подхода, вместе с Laravel 7, недавно вышел Livewire , специально разработанный под Laravel фулстек фреймворк для создание динамических сайтов, советую глянуть. Позволит быстро строить разные штуки, и порог входа ниже и проще React и Vue. В нём больше ориентация на AlpineJS. И в любом случае, после изучения, будет легче потом и Vue и React и изучать если что.
    Ответ написан
    Комментировать
  • Какой есть биллинг, который не требует базы данных?

    neuotq
    @neuotq
    Прокрастинация
    Ну так воспринмайте Mysql и тп как файлы. Они и есть файлы между прочим.
    А все пляски с хранением инфы в обычных текстовых файлах (что всё равно можно назвать базой данных) со времем сведётся к тому, что вам нужно будет реализовывать множество функций (блокировка, транзакции и тп, для билинга всё же повышенные требования к надежности, защищенности от дубляжей и тп) уже существующих баз данных. спрашивается, зачем это нужно?
    Не нравятся вам работать с mysql, так не работайте, в самом php уже давно есть pdo, более того есть различные еще более высокго уровня абстракции типа Doctrine 2 или Active Record (например Eloquent)
    Где вам практически не нужно думать о конкретике.
    Ответ написан
    Комментировать
  • Каким образом загружать несколько файлов из формы, при этом, обрабатывая их через Intervention Image?

    neuotq
    @neuotq
    Прокрастинация
    Ну первое у вас есть наверное опечатка, здесь нужно images, тк в форме images
    $files = $request->file('images');
    Далее, как я понимаю здесь
    Image::make($file)->insert($watermark, 'bottom-right', 100, 100)

    Вы хотите вызвать экземпляр класса Intervention\Image, но одновременно видимо у вас и модель называется Image, и подключается позже, а значит php воспринимает это как App\Image.
    Значит вам нужно Intervention\Image добавлять другим алиасом, (меняйте в config/app.php , раздел aliases).
    Ну и не забывайте, что после этих исправлений, у вас будет просто загрузка фото, без сохранения в БД, поэтому если нужно еще сохранить что-то в БД, например в вашу модель Image, то нужно дополнительно писать код.
    Ответ написан
    1 комментарий
  • Есть ли смысл учить wordpress в 2020?

    neuotq
    @neuotq
    Прокрастинация
    Да.
    Вообще глупый вопрос, вы уж извините.
    Есть смысл учить любой инструмент который вам нужен в работе. Нужен wordress, ок. Учите.
    А насчет того, что там что-то умирает и тп, ну до этого нужно ещё дожить, возможно вы уже даже не будете разработчиком, а руководителем например?
    Короче говоря, делайте и учите то что получается и имеет спрос.
    Wordpress еще долго будет иметь крайне высокий спрос, а php вовсе не умирает, свою долю в своей нише он имеет достаточно серьёзную и активно развивается. Как и вордпрес
    Ответ написан
    Комментировать
  • Безкінечно загружається прототип у Figma?

    neuotq
    @neuotq
    Прокрастинация
    Скорее всего что-то с сетью/DNS. Возможно у вас он блокируется брандмауэром.
    Декстопная версия на самом деле написана на electronjs, а значит там node.js и chromuim внутри. Те по сути альтернативная версия браузера заточенная под запуск приложения Figma.
    И если у вас в браузере всё ок, а десктопной нет, значит скорее всего смотрите нет ли запрета по сети в брандмауэре.
    Ответ написан
    Комментировать
  • Граница между front-end и back-end?

    neuotq
    @neuotq
    Прокрастинация
    Чтобы там не говорили, бэкэнд может оставаться полностью черным ящиком только для верстальщика, ито с оговорками.
    Фроентэнд разработчик, даже с джун уровня, уже активно работает с получением отправкой данных, интерактивными интерфейсами и тп. Понимать как и почему некоторые штуки там работают нужно. Хорошо даже уметь быстро что-то простое сделать. Я не говорю становится фулстеком в полном смысле этого слова, НО. По хорошему: фронтендер мидл и выше уровня можно с натяжкой назвать фулстеком, просто с большим перекосом на фронт часть.
    Просто даже серверлесс направление, заставляет в той или иной степени понимать процессы происходящие на той стороне.
    Ну и в любом случае, в случае активной практики и развития, вы сами столкнётесь с тем, что иногда нужно даже лезть и писать какие-либо свои простые скрипты.
    Отмечу отдельно, это не значит что нужно с головой падать, пытаться стать фулстеком. знать всё и тп. Нет, я имею ввиду что понимание работы бекенда, а значит и умение делать некоторые вещи, должны будут и прийдут при активной работе и роста вас как специалиста.
    Это же касается тех же софт скилз и менеджерских умений.
    Ответ написан
    1 комментарий
  • Почему возраст не выводится?

    neuotq
    @neuotq
    Прокрастинация
    $first_age = array_column($records, 'last_age');
    $first_age - массив.
    Далее
    $birthday_timestamp = strtotime($birthday);
    strtotime()- принимает только строки.
    А значит вызывать вашу функцию нужно
    echo calculate_age($first_age[0]);
    Или в цикле по каждому элементу
    Ответ написан
  • Нормально ли будет взять October CMS за основу сайта?

    neuotq
    @neuotq
    Прокрастинация
    Ну, откровенно говоря он избыточен. October CMS можно сказать wordpress в мире Laravel.
    Те просто ради админки его брать нет смысла. А вот если вы хотите использовать их обширную библиотеку готовых плагинов то да.
    А так лучше подобрать из готовых кирпичиков круд админки, ларавел пакеты для управления ролями(например spatie/laravel-permission удобен достаточно, у spatie вообще много неплохих пакетов) и тп.
    Ответ написан
    Комментировать
  • Долгая обработка запроса php как передать браузеру что бы ждал ответа?

    neuotq
    @neuotq
    Прокрастинация
    Ну тут если делать всё прямо, то это тупо висящая страничка. Опасность еще в том, что пользователь в любой момент может нажать обновить страницу например. В любом случае, в прямом случаи вам нужно смотреть настройки таймаута длительности запроса в настройках php и вашего веб сервера.
    А так.. даже не знаю, может стоит проверять что запрос будет долгий, и если запрос будет долгий, вначале редиректить на временную страницу с предупреждением, а оттуда с таймаут уже на запрос, чтобы у пользователи перед глазами висела надпись ждите и ничего не трогайте.
    Это я описал алгоритм без js, со временной страницы можно редирект делать через
    .
    А так... всё же лучше делать отдельно задания.
    Те пользователь отправил вам тяжелый запрос, вы его приняли, сразу вернули пользователю ответ что я принял задание, будет готово через 20 минут. А в коде в расписание/очередь свыставляете задание на генерацию вашей csv.
    А далее пользователь получает(пуш уведомление. email еще как, это не суть) уведомление о готовности задания, либо о его не удачи.
    Ну те вам нужен: очередь/планировщик задания, события, уведомления.
    Я бы на вашем месте всё же рассмотрел либо фреймворк какой-то, либо комопненты Симфони или в репозитории composer поискал что-то, для облегчения задачи. Чтобы меньше велосипедов плодить.
    Ответ написан
  • Выходит ошибка, не могу понять в чем дело?

    neuotq
    @neuotq
    Прокрастинация
    Если User::find(1) возвратить null, а значит пользователя с id 1 нет, то дальнейшая цепочка не будет работать, так как "волшебство" не получится из-за отсутвия объекта класса User.
    Лучше всё таки юзера заранее найти и сохранить в переменную(так же это позволит не делать доп запросы к базе, если будете использовать сущность еще раз).
    $user = User::find(1);
    А далее уже вы можете испоьзовать првоерки существования, перед выовом метода, например:
    $moderator = isset($user) ? $user->moderator : null;
    Ответ написан
    Комментировать
  • Как правильно указать зависимости своего пакета?

    neuotq
    @neuotq
    Прокрастинация
    Прочитав комментарии, заметил что вы слишком жестко указали версию php.
    Лично я советую сатвить как можно меньшую (со знаком больше либо ровно), на которой конкретно ваш пакет будет работать.
    Например, если конкретно ваш код, способен работать на 5.4, ставьте ее, возможно ваш пакет буду использовать на более старых системах. Естественно если есть прям зависимости ,которым нужно больше априори, то смысла в этом не будет. Но это считается хорошей практикой.
    Те в вашем конкретном случае
    "php": ">=7.2"
    Но если есть, возможно ставьте "php": ">=5.4"
    Ответ написан
  • Как прокачаться до middle frontend?

    neuotq
    @neuotq
    Прокрастинация
    Отвечу абстрактно. Без привзяки к фронту/беку
    Миддл это просто специалист который может четко сам выполнять поставленные задачи, без чуткого руководства и явных указаний. Конечно же это практика, при чём прежде всего коммерческих/оплачиваемых проектов. Те определенный профессиональный опыт, который позволит прочувствовать технологии, людей, команды, бизнес задачи.
    Так же способен сам принимать некоторые тактические решения, по тому как именно делать некоторые штуки. Таким образом, как только вы перестаёте себе задавать поставленный в топике вопрос, вы уже ближе к мидлу ;-)
    Сеньёр это логическое дальнейшее развитие, здесь уже человек готов принимать более серьезные решения по структуре (и во многом архитектуре проекта), многое планирует сам, способен получить от продакта/бизнеса постановку проблемы и сам сформировать задачу и решить её грубо говоря в одиночку. По задачам, не касаемых его профиля, он будет успешно делегировать и/или сотрудничать с другими специалистами, снова таки, без дополнительной опеки, а сам берёт на себе ответсвенность.
    Поэтому кстати, многие засиживаются в миддл уровне, не потому что они прям ой ой плохие спецы, совсем нет. Просто далеко не для всех подходят моменты с принятием решений, активные действия с другими людьми командование и тп.
    НО, сразу стоит отметить, тут выше уже писали, и я тоже скажу. Многие компании используют термины джуниор/миддл/сеньйор на свое усмотрение, поэтому нередко это субъективные параметры.
    Но, как мне кажется, то что я описал, будет как минимум одходить под большинство требований и мидла и сеньйора, а может даже и переходить у некоторых в более высокую градацию.
    А что касается конкретных технологических штук. то в сети полно подборок. путей развития (гугли Developer Roadmap и подобное), но без практики в релаьных проектах, желательно коммерческих, но можно и многих опенсурс, это мало что значит.
    Ответ написан
    Комментировать
  • Как в laravel реализовать логику получения статуса заказа при изменении записи в бд?

    neuotq
    @neuotq
    Прокрастинация
    Я возможно чего-то не понял, но вопрос странный, особенно для того кто просто, хотя бы заглянул в документацию.
    В Laravel есть события, их можно создавать, слушать и тп.
    Более того, там даже пример кода для событий по статусам заказа (доставка, и отправка уведомления о доставке) :-)
    Ответ написан
    Комментировать
  • Как удалить файл в laravel?

    neuotq
    @neuotq
    Прокрастинация
    Чтение документации и изучение хорошей пратики всё таки немного облегчает жизнь.
    Итак.
    Хранить в БД url, как делаете вы, обычно не выгодно и неинтересно. Это нужно в исключительных случаях одно разового мини проекта, когда вы точно знаете настроки меняться не будут и файлы редактироваться не будут. Либо, в специализированных БД для кеширования результата генерации url.
    В иных случаях хранить в БД нужно имя файла. Имя файла в идеале разбить конечно, но в подавляющем числе случаев достаточно будет два поля: имя с путём + имя диска. Это закроет большинство кейсов для будущего масштабирования. Но если уж совсем лень, то имя диска тоже можно опустить, хотя я советую добавить это поле.
    Далее, ваш код:
    $path = Storage::putFile('public/img', $request->file('img'));
    $url = Storage::url($path);
    $post->img = $url;

    Меняем на более простой (хотя аналог можно и из вашего конечно сделать, убрав строчку с $url и сохраняя в модель $path)
    // file('img') - это имя файла(инпута формы например) из запроса
    // store('img') - это имя подпапки для
    // 'public' - Диск из настроек (см filesystems.php)
    $path = $request->file('img')->store('img', 'public');
    $post->img = $path;

    Теперь и удалать легко. не забываем что с файлами мы работаем(по умолчанию), относительно папки /storage/app/(слеш в начале я поставил чтобы показать что путь от корня папки с проектом)
    Поэтому, когда вы передаёте в метод удаления сгенерированный заранее url. он ничего не найдёт и не удалит.
    Но теперь мы храним как раз относительный путь файла.
    Storage::delete($post->img);
    Теперь сработает, не забываем очистить поле, после удаления, если вы при этом не удаляете сам пост.

    Далее, сам url получаем так
    $url = asset($post->img);
    Ну, или если вы делаете сразу в blade шаблонах
    <img src="{{asset($post->img)}}">
    Ну и конечно я всякие проверки и тп опустил для простоты
    Ответ написан
    Комментировать
  • Как отслеживать клики по виджету Instagram (внутри iframe)?

    neuotq
    @neuotq
    Прокрастинация
    С айфремом ничего путного не выйдет, можно обходить и придумывать разной степени каличности и костыльности методы (не обхода ограничения, а методы примерно узнать что пользователь хотел сделать).
    Короче гиблая история.
    Лучше тогда быстро собрать через api свое решение, там простые методы(но только чтение/получиение данных) и после реализации получится свой виджет, который можно анализировать уже как угодно с высокой точностью.
    Ответ написан
    Комментировать
  • Class 'ImageSplitter\ImageSplitter' not found in Laravel6?

    neuotq
    @neuotq
    Прокрастинация
    У автора пакета BardoQi/ImageSplitter ошибка в composer.json.
    В секции автозагрузки, вместо
    "autoload": {
            "psr-4": {
                "BardoQi\\image-splitter\\": "src/"
            }
        }

    Нужно
    "autoload": {
            "psr-4": {
                "ImageSplitter\\": "src/"
            }
        }

    Наверное он забыл исправить префикс либо вообще не понимает как это работает.
    Ответ написан
    Комментировать
  • Как сформировать такой URL?

    neuotq
    @neuotq
    Прокрастинация
    Через http_build_query, никак, формируйте самостоятельно через цикл, или вручную
    $query = urlencode('code[]') . '=' . urlencode(100) . '&' . urlencode('code[]') . '=' . urlencode(200);

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

    neuotq
    @neuotq
    Прокрастинация
    Легче всего, чтобы не парится.
    Примерно так, писал без тестирования, но идея понятная надеюсь
    const replacePairs= {'было1': 'стало1', 'было2': 'стало2', 'было3': 'стало3'};
    $("body").children().each(function() {
      let currentNode = $(this);
      for (const pair in replacePairs) {
         currentNode.html(currentNode.html().replace(/`${pair}`/g, `${replacePairs[pair]}`));
      }
    });
    Ответ написан
  • Почему контекст вызова разный?

    neuotq
    @neuotq
    Прокрастинация
    Читаем документацию :
    Стрелочные функции не содержат собственный контекст this, а используют значение this окружающего контекста.
    Ответ написан
    1 комментарий
  • Почему видео работает после закрытия?

    neuotq
    @neuotq
    Прокрастинация
    Я не лез прям разбираться в ваш код на сайте, это неудобно.
    Но проблема не в плагине. Плагин делает только две штуки: ставит превьюшку видео как обычную картинку, по клику динамически загружается iframe всего плеера youtube. Всё.
    Ваша задача, реализовать новые функции по зыкрытию модельного окна.
    Алгоритм:
    1. Отслеживаете событие закрытие окна.
    2. Когда событие сработало вы либо, через youtube js api ставите плеер на паузу (не знаю насколько это возможно в вашем варианте) либо полностью сами удаляете весь плеер, и восстанавливаете вид поумолчению, те то как должен выглядит код html с самого начала тег div с параметрами, но тут вопрос насколько динамически отслеживает библиотека, поэтому наверное легче будет снести вообще всё оттуда. А инициализировтаь div и библиотеку lazyYT динамически каждый раз когда модалка открывается.
    Вообще конечно всё корявенько по совремнным меркам.

    А вообще советую использовать тогда лучше уж plyr вмеcто устаревшего lazyYT , у него хотя бы api есть для удобного управления плеером.
    Ответ написан
    1 комментарий