Задать вопрос
  • Зачем нужны методы отправки данных отличные от GET, POST?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Удобно эндпойнты в апи делать

    [GET]    /order/{id}  получить информацию о заказе
    [POST]   /order/{id}  создать новый заказ
    [PUT]    /order/{id}  обновить данные в заказе
    [DELETE] /order/{id}  удалить заказ


    Вместо

    [GET]  /order/{id}
    [POST] /order/{id}/create
    [POST] /order/{id}/update
    [POST] /order/{id}/delete


    будет ли нормальная поддержка этих методов в том же php и формах html?


    https://caniuse.com/mdn-http_methods_put
    https://caniuse.com/mdn-http_methods_delete

    А что вы имеете ввиду под нормальностью в php? Определить метод запроса можно, прочитав $_SERVER['REQUEST_METHOD'], получить данные из php://input

    UPD

    Нашел вопрос аналогичный. Ответы краткие но емкие и по делу.
    https://stackoverflow.com/questions/27941207/http-...
    Ответ написан
    Комментировать
  • Как заигнорить файл .gitignore?

    delphinpro
    @delphinpro
    frontend developer
    Я правильно понимаю, что цель - исключить какие-то файлы, нужные только вам, локально, а про файл .gitignore вы уже сами додумали?

    Мне было бы удобнее всё-таки иметь в проекте файл .gitignore (наверняка он у вас есть).
    Подобные файлы складывать в отдельную папку, которую и добавить в игнор.

    Но если всё же ничего трогать не хочется, то можно использовать глобальный список игнорирования.

    Откройте файл %USERPROFILE%/.gitconfig
    Добавьте строку в секцию core

    [core]
    	excludesfile = C:\\path_to\\.gitignore


    Создайте файл в указанном месте и пропишите там нужное.
    Этот файл будет применяться ко всем репозиториям, открываемым на вашем компьютере.

    Можно использовать консоль, для добавления глобального игнор-списка в конфиг

    git config --global core.excludesFile "%USERPROFILE%\.gitignore"
    Ответ написан
    Комментировать
  • Docker на windows не работает volumes?

    @KoreanGuy
    так как ты явно указываешь директорию на хосте, это не volume, а bind mount. Когда используешь bind mount, конфиг-секция volumes (на топ уровне) не нужна. Можешь ее удалить. Тем более ты все равно пишешь ее не правильно. А файлов у тебя нет, потому что ты не ту директорию в контейнере указываешь. Нужно /var/lib/postgresql/data
    Ответ написан
    4 комментария
  • Из за чего ошибка при использовании примера из документации vue?

    @GrayHorse
    Копирую его в проект и при вызове метода на кнопку получаю в консоли:


    Что? Какого метода? Кнопку?

    Нашел пример в документации. Копирую его в проект


    Куда его можно скопировать (неправильно), если это уже по факту полноценное рабочее приложение на Vue.js:

    <!DOCTYPE html>
    <html>
    <head>
        <script src="https://unpkg.com/vue@next"></script>
    </head>
    <body>
    <div id="mount-point"></div>
    <script>
        const Profile = {
            template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
            data() {
                return {
                    firstName: 'Walter',
                    lastName: 'White',
                    alias: 'Heisenberg'
                }
            }
        }
        Vue.createApp(Profile).mount('#mount-point')
    </script>
    </body>
    </html>


    Что это и почему?

    Это исключение.
    Vue.js не был подключен.
    Ответ написан
    Комментировать
  • Как исправить ошибку "Class not found"?

    @FernandoErrNando
    Попробуйте быть чуток внимательней, я дам подсказку: вы пытаетесь в сидере вызвать фабрику класса (MyuserFactory), которой у вас нет, но есть TestFactory. Значит, надо поменять ...
    Ответ написан
    Комментировать
  • Как настроить автоматические отступы от скобок при автоимпорте в phpStorm?

    Preferences/Settings | Editor | Code Style | JavaScript | Spaces | Within | ES6 import/export braces.
    Ответ написан
    Комментировать
  • Как выполнить еще одну команду в docker?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это считается не docker-way (правильнее в отдельном контейнере запустить отдельный обработчик очереди), но можно так:

    одна команда & другая команда

    Можно также сделать скрипт, который всё как надо запустит, и использовать его в качестве cmd. Можно также внедрить в контейнер микросистему управления сервисами типа runit.

    Почему считается, что плохо так делать? Если php-fpm упадёт, то весь контейнер упадёт и может перезапуститься автоматом. А если упадёт второй сервис, то контейнер будет работать как ни в чём не бывало.
    Ответ написан
    Комментировать
  • Размытие фона на js?

    profesor08
    @profesor08 Куратор тега CSS
    Используй backdrop-filter. Где не поддерживается, ничего страшного не случится.
    Ответ написан
    1 комментарий
  • Пользовательское соглашение для ПО. Что писать?

    hint000
    @hint000
    у админа три руки
    Хорошая статья, из которой процитирую несколько фраз:
    https://habr.com/ru/company/itsoft/blog/525054/
    ...Дублирование того, что уже и так прописано в законе.
    ...Ничтожные пункты, которые противоречат законам.

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

    ...Каждый пункт нужно формулировать простым понятным языком, если слово можно выкинуть без потери смысла, то нужно выкинуть. Если из пункта непонятно зачем он нужен, то нужно либо переписывать либо удалять. За каждым пунктом должно стоять конкретное осмысленное действие, условие, требование.
    Ответ написан
    1 комментарий
  • Приложение масштаба предприятия на Symfony?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    По моему имху такого плана приложение писать стоит на ларавеле, фронт vue, react, angular. Если же конечно не перейти на другой язык на бэке
    Ответ написан
    7 комментариев
  • Приложение масштаба предприятия на Symfony?

    @caballero
    Программист
    гемор создания ERP это сложность реализации самой ERP
    какой там язык вопрос десятый

    использование такого сложного фреймворка как synfony только осложняет дело

    использование javascript фреймворков нафиг не нужных а в таких приложениях это дополнительных гемор

    ну написал некто на хабре что он так сделал и что? мало ли кто как делает
    Ответ написан
    8 комментариев
  • Как лучше структурировать элементы массива?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Вместо кучи компонентов с if, используй один <component :is="conponent" v-bind="allprops"/>.
    Ответ написан
    5 комментариев
  • Npm, Webpack, NodeJs с чего начать?

    @deliro
    Фронт развился в какую-то неправильную сторону, это правда
    Вкатиться на фронт очень сложно, это тоже правда. Причём, необоснованно сложно.

    Я бы выделил два пути, как можно въехать во всё это:
    1. Создать приложение на Vue или React по туториалам, затем разобраться, как и зачем оно всё
    2. Разобраться как и зачем оно всё (aka Vanilla JS), потом заняться реактами

    Имхо, вариант №2 предпочтителен и более прост, потому что на варианте №1 есть огромный шанс застрять, никогда не разобравшись, как оно работает а при любых нешаблонных ошибках поднимать лапки.

    Что здесь нужно понимать:
    1. Есть разные версии ES (ecmascript), они все обратносовместимые. Программист может писать на любой версии, какая ему нравится. Обычно берут последнюю стабильную

    2. Для проекта обычно есть две версии ES: та, на которой пишут программисты и та, которая исполняется в браузере или в ноде (об этом позже). Например, программист пишет на ES8, а код транслируется на ES5. Это позволяет использовать последние предсмертные хрипы писки моды JS при этом запуская всё на древнейшем говне вроде IE11. Перегонкой кода из JS/TS одной версии в JS другой версии занимается транспилятор: babel / esbuild / swc

    3. Новые версии JS содержат расширения стандартной библиотеки, которых нет в старых браузерах (например Array.from, Object.entries и т.п.). Эти дырки затыкают полифиллы, они же shims. Самая популярная дырозатыкательная машинка — corejs

    4. Весь код очевидно не пишется в одном файле и может быть написан на TypeScript (он же TS), JSX/TSX (реактовый синтаксис). Всё это нужно собрать в один или несколько файлов, то есть скомпоновать. Этим занимается bundler: часть webpack / esbuild / spark / etc.

    5. Этот же парень отвечает за то, чтобы та тысяча библиотек, что лежит в node_modules, попала в итоговый условный main.js, но не целиком, а только то, что используется. Последнее называется tree shaking (типа навозную кучу node_modules потрясли как дерево, что упало — то не нужно)

    6. (то самое "позже) Код может исполняться не только в браузере пользователя, но и на сервере без браузера вообще. Это нужно для SSR aka Server Side Rendering. SSR — это такой глобальный вонючий костыль для SEO. Дело в том, что стандартные SPA приложения содержат один DOM элемент, куда цепляется всё остальное приложение вроде реакта или вью, которое уже содержит всю вёрстку прямо в JS. Но не все поисковики согласны с таким подходом и некоторые (не будем показывать пальцем на яндекс) не умеют выполнять JS и индексируют только тот самый единственный DOM элемент, который существует на этапе отдачи страницы в браузер. Это уже потом к нему JS движком дорисовывается весь остальной сайт. Соответственно, сайт индексируется от слова "никак", а некоторым это важно. Например, когда SPA — это не админка. Для этого есть два выхода: страницы, важные для SEO, рендерить чем-то не-реактовым или сделать SSR — делать за яндекс работу на сервере (на ноде), представляя в уме, что у нас есть DOM и браузер (на самом деле нет), на выходе получать начальное состояние HTML, отдавать его клиенту (браузеру или поисковому роботу), а JS'ом её т.н. "гидрировать", иными словами — оживлять.

    7. webpack отвечает за всё вот это сверху в том или ином виде. Это такой кухонный комбайн, в который вкидываешь кучу хлама в одном виде, а получаешь другую кучу хлама в другом виде.

    Начать советую с parceljs, который сильно проще в освоении, чем webpack. И на написании кода максимально без библиотек.
    Ответ написан
    1 комментарий
  • Два домена для локальной разработки?

    akelsey
    @akelsey
    nginx будет работать с headers приходящими от браузера, и без разницы где он, в докере, на хосте. Варианта три:
    1. купить mylocasite.com и настроить dns
    2. настроить локальный днс сервер (например тоже в докере) и там прописать эту доменную зону
    3. добавить адреса в hosts машинки на которой будет запускаться браузер для отладки и локальной разработки.
    Ответ написан
    4 комментария
  • Как исправить ошибку Target class [...] does not exist?

    @kandrash
    Кратко о себе
    Сейчас принято писать
    Route::get('/show', [TestController::class, 'show']);

    И самая зачуханая IDE подскажет, что такого класса нет, пиши неймспейс полностью
    Ответ написан
    Комментировать
  • Как правильно передавать заказчику код?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Я несмотря что делаю все под ключ, обычно создаю readme.txt install.txt все это в папке проекта.
    Дополнительно в сложных проектах добавляется install.docx userguide.docx
    И да бэкапьте переписку и мессенджеры, там много моментов есть те которые упускаются.
    Только одно замечание обговаривайте документацию и ее качество, и дальнейшую поддержку, это важно
    Ответ написан
    Комментировать
  • Как в Laravel вызвать метод модели?

    @jazzus
    Удалить Initial. Удалить InitialResource. Ибо это не ресурс. Передавать данные через json response. Внутри которого CategoryResource. Для правильного запроса квери билдер метод where. Если хочется вызывать методом из модели делай scope. Без get в модели. Передавать, как написано в документации
    CategoryResource::collection($categories);
    Ответ написан
    7 комментариев
  • Как в Laravel вызвать метод модели?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Ну если вы все запрашиваете Category::all(), то вам все и выплевываются.
    Запрашивайте только активные

    'mainMenu'   => CategoryResource::collection(Category::where('enabled', true)->get()),


    https://laravel.com/docs/8.x/eloquent#building-queries
    Ответ написан
    2 комментария
  • Как правильно написать свой обработчик ошибок php?

    Vamp
    @Vamp
    Как правило, обычные ошибки не обрабатывают в таком обработчике, а конвертируют в ErrorException.

    function error_handler(
        $error_code,
        $error_message,
        $error_file_name,
        $error_line
        // $error_context - не объявляйте этот аргумент. Он не существует.
      ){
    
        throw new ErrorException($error_message, 0, $error_code, $error_file_name, $error_line);
    
      }
    
      set_error_handler('error_handler', -1);

    Ну а дальше ловите исключения как обычно.

    // some code...
    
    $host_db = '127.0.0.1';
    $login_db = 'root';
    $password_db = '';
    $database_db = 'some_db';
    
    $DB = new PDO('mysql:host=' . $host_db . ';dbname=' . $database_db, $login_db, $password_db);
    $DB -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    try {
        $DB -> beginTransaction();
    
        // some code...
    
        $DB -> commit();
    } catch (\Throwable $e) {
        $DB->rollback();
    }
    // some code...
    Ответ написан
    6 комментариев
  • Как правильно написать свой обработчик ошибок php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Перед тем как писать обработчик, надо сначала понять, а зачем он нужен.
    Потому что вот эта вот функция - она совершенно бессмысленная.
    Вся "обработка", которой она занимается - это добавляет бессмысленные фразы типа "Error_message" к тому что РНР выведет и так.

    Обработчик ошибок не должен заниматься удалением файлов. Обработчик вступает в дело, когда ничего исправить уже нельзя, и всё что остаётся - это показать пользователю страницу с извинениями и корректным НТТР кодом. Пример можно взять здесь: https://phpdelusions.net/articles/error_reporting

    А вот обрабатывать ошибки надо с помощью оператора try catch
    Если надо откатить транзакцию, то всю её целиком надо поместить внутрь try catch, в котором ловить ВСЕ ошибки, то есть \Throwable и после этого скорее всего добавить throw с тем же исключением, поскольку вряд ли при ошибке БД имеет смысл продолжать работу скрипта. Но зависит от обстоятельств.

    Если надо удалить файлы, то опять же, заключить в try catch загрузку файлов, то тут просто заключить в try catch, всё почистить и написать какое-нибудь сообщение пользователю.
    Ответ написан
    2 комментария