Задать вопрос
  • Как сделать scrolltop у аккордиона?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Попробуй так

    const openAccordion = (accordion) => {
        // твой код
        accordion.scrollIntoView();
    };


    https://developer.mozilla.org/ru/docs/Web/API/Elem...
    Ответ написан
    Комментировать
  • Почему маршруты определенные в пользовательском сервис-провайдере в Laraval недоступны?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    <?php
    
    namespace App\Modules\Orders;
    
    use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
    
    class OrdersServiceProvider extends ServiceProvider
    {
        public function boot(): void
        {
           $this->routes(function () {
                Route::prefix('api/orders')
                    ->group(base_path('routes/api/orders.php'));
            });
        }
    }


    Также, рекомендую сравнить неймспейс в провайдере и в конфиге где его подключаешь, и путь к новому файлу с роутами, что в папке routes действительно есть подпапка апи и в ней файл
    Ответ написан
    Комментировать
  • Как изменить значение при смене данных выпадающего списка?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет

    1 Нужно чтобы в Лист1 выпадающие списки были настроены как выпадающие списки из диапазона (в гугл таблицах, щелкаешь на настройки списка, в пункте "критерии" выбираешь пункт с диапазоном, в появившееся поле вставляешь что-то типа ='Лист2'!A1:A3)

    2 В столбце B на Лист1 прописываешь формулу =ИНДЕКС(ЕСЛИОШИБКА(ВПР(A:A;'Лист2'!A:B;2;)))
    Ответ написан
    1 комментарий
  • Как можно отследить изменение файлов в директории?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    В общем на PHP есть вот такой вариант https://habr.com/ru/articles/213895/
    Если не обязательно PHP то есть вот такое https://github.com/SpartanJ/efsw

    Если файлы таки меняются посредством http запросов, то просто делаешь класс слушателя и в нужных API методах дергаешь событие. Для Laravel https://laravel.com/docs/11.x/events, если на чистом PHP, то вызываешь в API метод который положит, нужные для обработки изменений, данные в очередь (например на редисе) и рядом делаешь демон, который из очереди будет вычитывать и что-то с этим делать
    Ответ написан
  • Выполняются оба метода из двух разных форм. Как исправить?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    попробуй поменять button type="submit" на button type="button" и повесить событие не на $('#form-import').submit а на $('#button-import').click

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

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Потому что у тебя в request1 и в request2 лежит индекс одного и того же объекта https://www.php.net/manual/ru/language.oop5.refere...
    Ответ написан
    24 комментария
  • Как исправить ошибку Missing required parameter?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет!

    Вместо index.blade.php лучше бы ты предоставил как указан маршрут в web.php (f.e.) и не весь файл, а только один этот маршрут. Точно так же и с контроллером, все остальные методы кроме update можно было бы убрать.

    В ошибке сказано
    URI: admin_panel/services/{service} Missing parameter: service


    Я вижу несколько возможных причин:
    1
    action="{{ route('services.update', $services['id']) }}"
    указан не на той форме, которая отправляется (надо проверить html форму прежде чем нажать сабмит, если это так то надо привести отправляемую форму в порядок)
    2 в
    action="{{ route('services.update', $services['id']) }}"
    не всегда был
    $services['id']
    , а после добавления его в шаблон на фронте страница не обновлялась или закеширована (надо проверить html формы прежде чем нажать сабмит, если это так, то надо обновить страницу и проверить html формы еще раз, если в поле action все еще не подставлен айдишник, то надо выполнить php artisan view:clear на сервере и обновить страницу на фронте, если не помогает, то надо проверить, что измененный шаблон подкинут на сервер, а не лежит чисто локально
    3 таблица services не имеет primary key на id (надо выполнить миграцию, которая это добавит), можешь дополнить вопрос миграцией для создания таблицы services
    4 $services['id'] имеет значение null (надо дебажить и смотреть почему туда попадает такое значение, скорее всего оно будет таким потому что нужно поменять на $services->id но это не точно)
    Ответ написан
    5 комментариев
  • Как отследить прямое обращение к картинкам и выполнять php?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Если я правильно понял, то нужно, чтобы файлы отдавал nginx напрямую, а после этого нужно чтобы вызывался пхп код. Можно попробовать покопать в сторону post_action, эта директива позволяет выполнить дополнительные действия после того, как Nginx отдает ответ клиенту.

    Например что-то типо такого:
    server {
        //
    
        location ~* \.(jpg|jpeg|png|gif)$ {
            try_files $uri =404;
            post_action /post_handler.php;
        }
    }
    Ответ написан
    Комментировать
  • Почему при нажатии на кнопку слайдера картинка пропадает js?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет!

    Коммент выше решает твою проблему, а я с оффтопным моментом. Как-то странно что при движении влево переменная увеличивается, а при движении вправо уменьшается :D я бы поменял
    upBtn.addEventListener("click", () => {
      let index = cardIndex + 1;
      if (index >= cards.length) {
        index = 0;
      }
      show(index);
    });
    
    downBtn.addEventListener("click", () => { 
      let index = cardIndex - 1;
      if (index < 0) {
        index = cards.length - 1;
      }
      show(index);
    });
    Ответ написан
    1 комментарий
  • В чем ошибка в коде?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет, ознакомься с документацией

    https://laravel.com/docs/11.x/routing#dependency-i...

    И попробуй внести правки в свой код в соответствии с докой

    use Illuminate\Http\Request;
    
    Route::post('/contact/submit', function (Request $request) {
        return $request->all();
    })->name('contact-form');
    Ответ написан
    1 комментарий
  • Почему не работает POST-запрос от React(+Redux) к PHP?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Undefined array key "perem" on line 49


    $perem = $data['perem'];
    - вот тут у тебя нет в массиве data (а это переданный массив POST) нужной переменной.

    Пропиши
    var_dump($data);
    exit;

    перед
    $perem = $data['perem'];
    например и посмотри что там в принципе лежит (если будешь дергать из браузера то надо смотреть в разделе network response)

    UPD
    Не обратил внимание сразу, с фронта уходит

    Content-type: application/json


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

    addTableNote($conn, $_POST);

    на
    $data = json_decode(file_get_contents('php://input'), true);
    addTableNote($conn, $data);


    либо с фронта отправляй как FormData
    Ответ написан
    2 комментария
  • Есть ли способ запустить vite/vue приложение без сервера?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    чтобы его можно было просматривать без сервера и без npm run preview

    Да, можно

    в vue.config.js нужно чтобы было
    module.exports = defineConfig({
      transpileDependencies: true,
      outputDir: "./pathToSource",
      filenameHashing: false,
    })


    выполнить npm run build
    в index.html прописать линки до js/css в pathToSource

    запустить vite/vue приложение без сервера

    Локально да, на проде все равно будет использоваться сервер, в твоем случае сервер вк видимо, но это частный случай
    а в общем случае, даже если не нужна никакая логика на бэке, то для этого все равно понадобится как минимум настроеный apache/nginx
    Ответ написан
    Комментировать
  • Как преобразовать UNION-запрос в простой?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Наркомания, но должно работать

    SELECT
        CASE 
            WHEN FirstField LIKE '*о*' THEN FirstField
            WHEN SecondField LIKE '*о*' THEN SecondField
        END AS Field
    FROM Table
    WHERE FirstField LIKE '*о*'
    OR SecondField LIKE '*о*';


    UPD
    Хорошо, продолжаем наркоманить :D

    С учетом комментария Vitsliputsli

    SELECT DISTINCT
        CASE 
            WHEN t1.FirstField  LIKE '*о*' THEN t1.FirstField
            WHEN t2.SecondField  LIKE '*о*' THEN t2.SecondField
        END AS Field
    
    FROM Table t1
    
    LEFT JOIN Table t2 ON 1=1
    
    WHERE t1.FirstField LIKE '*о*'
       OR t2.SecondField LIKE '*о*';


    Добавили distinct чтобы не было повторений, добавили join той же таблицы, по t1 проверяем подходит ли FirstField по t2 - SecondField. Единственный вопрос, а допустимо ли в этой задаче использовать join)

    PS разумеется запрос говна, про оптимизацию речи не идет
    Ответ написан
    1 комментарий
  • Как сделать проверку на корректную вложенность в скобки ((([])){})?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    /**
     * @param {string} s
     * @return {boolean}
     */
    var isValid = function (s) {
        //hash function for partheses
        let map = { "}": "{", "]": "[", ")": "(" };
        let temp = [];
    
    
    
        //Iterates
        for(i in s){
            //if a index that matches a closing bracket - continue
            if(s[i] in map){
                //if the temp isn't empty, and the top of the stack is that closing bracket - pop it
                if(temp.length > 0 && temp[temp.length-1] === map[s[i]]){
                    temp.pop();
                }
                //else we break it - return false
                else{
                    return false;
                }
            }
            //else we push the opening bracket onto the stack
            else{
                temp.push(s[i]);
            }
        }
        //else we return true if the temp is empty
        return temp.length === 0;
    };


    Прямо в литкоде есть решения, можно открыть Solutions, отфильтровать по языку и читать с описанием, можно перейти к all submissions и выбрать самое быстрое решение.
    Ответ написан
    5 комментариев
  • Vue 3 Composition API как обратиться к функции через this.$refs?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Из дочернего объекта можно вызвать родительский через $emit.
    В родительском компоненте надо прописать
    <daughter-component
         @nextStep="nextStep"
    ></daughter-component>


    В дочернем компоненте
    valdiateStep(currentStepIndex){
        this.$emit('nextStep'); // если надо передать параметр то this.$emit('nextStep', param); 
    }


    Если компоненты не связаны как родитель-ребенок то есть смысл покопать в сторону vue event bus и Шина событий
    Ответ написан
    2 комментария
  • Как сделать коммуникацию front-end и back-end в реальном времени?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Попробуй покопать в эту сторону (запрос js stream data from backend)

    https://developer.mozilla.org/en-US/docs/Web/API/S...
    https://dev.to/bsorrentino/how-to-stream-data-over...
    Ответ написан
    Комментировать
  • Laravel всегда возвращает ответ 200?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет) Добавь

    use Illuminate\Http\Exceptions\HttpResponseException;
    use Illuminate\Contracts\Validation\Validator;


    и
    protected function failedValidation(Validator $validator)
        {
            throw new HttpResponseException(response()->json(
                [
                    'errors' => $validator->errors(),
                    'status' => true
                ],
                400
            ));
        }


    в StoreRequest
    Ответ написан
    8 комментариев
  • Как настроить WSS на apache, учитывая что https (REST api) работает?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    1. Попробуй добавить (нужно исправить путь к сертификатам, айпи + порт в прокси на айпи + порт вебсервера node)

    <VirtualHost *:443>
        ServerName test.example.com
    
        SSLEngine on
        SSLCertificateFile "/path/to/your/certificate.crt"
        SSLCertificateKeyFile "/path/to/your/private.key"
    
        <Location />
            ProxyPass "ws://localhost:7000"
            ProxyPassReverse "ws://localhost:7000"
        </Location>
    </VirtualHost>


    2 Перезагрузить apache

    Если не сработает (надо кстати дополнить вопрос, что значит не работает? какой http код? 404?), то проверь логи апача (и что он в целом запускается)

    А еще интересно, а ты обычный ws пробовал тыкать непосредственно на боевом сервере, к нему подключается? А локально ты это все делаешь через апач или просто ноду стартуешь и напрямую к ней коннектишься?
    Ответ написан