Задать вопрос
  • Для чего Laravel-разработчики стремятся создать избыточные API ресурсы?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    если нет никакой дополнительной обработки, то ведь можно просто сделать $model->toArray()?
    Можно, но а) тогда какие-то контроллеры будут возвращать массив, а какие-то ресурс и б) когда дополнительная обработка понадобится, нужно будет искать в коде все эти $model->toArray() и заменять их на ресурс.
    Проще сразу сделать "правильно", несмотря на то, что это "избыточно" - это и называется архитектурой кода.

    P.S. Но лично мне ларавелевские ресурсы не нравятся своей перемудрёностью и я использую простые DTO для этих целей.
    Ответ написан
    Комментировать
  • Где хранить "избранное" юзера?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Я для решения аналогичной задачи сделал api-роут, в котором проверяется авторизация - если пользователь авторизован, то запрос проксируется на бэкенд, если не авторизован, то идёт работа с локальной сессией.
    Ну а на клиенте просто в компоненте кнопки добавления в избранное через RTK-Query запрашивается id всех товаров из избранного через этот роут.
    Ответ написан
    5 комментариев
  • Названия в классов: я могу раздавать их рандомно или есть некая традиция, игнорирование которой считается плохим тоном?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега CSS
    В программировании есть традиция давать сущностям понятные имена.

    При этом, что такое "понятное имя", каждая команда договаривается самостоятельно. Кто-то пишет только на грамотном английском, кто-то использует колхозную транслитерацию. Один и тот же элемент на разных проектах может называться по-разному, потому что у них разная предметная область (например, menu/navigation). И так далее.

    Дополнительно, существуют и схемы наименования, самая популярная - БЭМ.

    С точки зрения же механики, браузеру совершенно всё равно, что написано у вас в классах (за исключением небольших технических ограничений, описанных в спецификации).
    Ответ написан
    Комментировать
  • Почему целесообразнее не использовать new для работы с классами, а предпочесть DI?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Вот почему: PHPunit замокать класс внутри тестируемого класса?
    Бонус-раунд: DI упрощает работу с зависимостями зависимостей. Если ваш MyService принимает какой-нибудь логер в зависимостях, который в свою очередь ожидает какой-нибудь драйвер файловой системы, вы задолбаетесь собирать их через new.
    Ответ написан
    Комментировать
  • Как снять башенный кулер?

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

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Вариантов развития событий два:
    1. Вы используете неверное сравнение. Например, у вас в target.innerHTML есть пробелы по краям, или какие-то теги, или не совпадает регистр.
    2. Условие срабатывает верно, но поскольку вы меняете стиль одного и того же элемента, вы не учитываете предыдущие или последующие итерации.


    Сделайте пример в песочнице и мы вас скажем точно, в чём проблема.
    Ответ написан
    2 комментария
  • Tailwind не перетирает предыдущие стили на других(больших) медиазапросах, что не так?

    Я, конечно, в вопросах Tailwind мимокрокодил, потому что у меня от его вида волосы на разных местах шевелятся, но у вас проблема явно в том, что не применяются медиа-запросы. Скорее всего, это связано с тем, что у вас после модификатора пробел стоит. Т.е. должно быть так:
    -sm: text-[200px]
    +sm:text-[200px]

    В вашем варианте, с точки зрения браузера, HTML и CSS, два разных класса, не имеющих никакого отношения друг к другу.

    Ну а в остальном всё так и есть - браузеру неважно, в каком порядке указаны классы в HTML, он руководствуется только порядком в CSS файле, где более поздние правила перевешивают предыдущие с аналогичной специфичностью.
    Ответ написан
    1 комментарий
  • Есть ли метод в JS, чтобы подсунуть дату в требуемом формате для парсинга?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Метода нет, но полно библиотек, которые это делают. Но можно и самостоятельно вот к такой простой конструкции привести исходную строку: +new Date('2024', +'02' - 1, '01') / 1000.

    Почему строку нужно предварительно разбить на части
    Потому что парсинг всей строки зависит от локали пользователя и результат может быть неожиданным:
    65bb4cedc4dc6827351618.png
    Ответ написан
    Комментировать
  • Почему не делают табы радио-кнопками?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    Семантично делать их ссылками.
    Радио-кнопки предполагают наличие формы, оборачивать табы в форму нелогично, так что вам кажется неправильно.
    Ответ написан
    5 комментариев
  • Как на PHP реализовать светофор?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Никакой интервал тут не нужен, достаточно знать точку отсчёта и стартовое состояние (у вас про них ничего не сказано, но за стартовое состояние по условию можно засчитать зелёный) и использовать простейшую математику, чтобы вычислить текущий сигнал.
    Хотя, если под вводимыми минутами понимается не таймстамп, а количество, прошедшее со времени включения, то в задаче есть все вводные для её решения элементарным алгоритмом.
    А сделать интерактивную смену на php вы всё равно не сможете*.

    *ну, есть, конечно, костыль с meta-тегом refresh, но это уже не про php.
    Ответ написан
    Комментировать
  • Как изменить переменную в массивоподобном объекте JS?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Никак, вы чего-то очень странного хотите. Квадратные скобки используются для работы с объектом (получение или изменение значений его свойств), через них никак нельзя изменить значение переменной, которую вы в скобках используете.
    Если вы хотите получить «50», то это делается так: info['10']['5'][propName]
    Ответ написан
  • Как залить на composer новый fork git проекта?

    Loading a package from a VCS repository
    There are a few use cases for this. The most common one is maintaining your own fork of a third party library. If you are using a certain library for your project, and you decide to change something in the library, you will want your project to use the patched version. If the library is on GitHub (this is the case most of the time), you can fork it there and push your changes to your fork. After that you update the project's composer.json. All you have to do is add your fork as a repository and update the version constraint to point to your custom branch. In composer.json only, you should prefix your custom branch name with "dev-" (without making it part of the actual branch name). For version constraint naming conventions see Libraries for more information.

    Example assuming you patched monolog to fix a bug in the bugfix branch:
    {
        "repositories": [
            {
                "type": "vcs",
                "url": "https://github.com/igorw/monolog"
            }
        ],
        "require": {
            "monolog/monolog": "dev-bugfix"
        }
    }
    https://getcomposer.org/doc/05-repositories.md#loa...

    как залить на composer
    Если вы под этим понимаете Packagist, то инструкция находится прямо на главной странице:
    Define Your Package
    Put a file named composer.json at the root of your package's repository, containing this information:
    {
        "name": "your-vendor-name/package-name",
        "description": "A short description of what your package does",
        "require": {
            "php": ">=8.2",
            "another-vendor/package": "1.*"
        }
    }

    This is the strictly minimal information you have to give.

    For more details about package naming and the fields you can use to document your package better, see the about page.

    Validate The File
    Run composer validate to check that your file has no syntax errors.

    Commit The File
    Add the composer.json to your git or other VCS repository and commit it.

    Publish It
    Log in or register on this site, then hit the submit button in the menu.

    Once you entered your public repository URL in there, your package will be automatically crawled periodically. You just have to make sure you keep the composer.json file up to date.
    Ответ написан
    Комментировать
  • Почему консоль выводит это значение?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Вы пытаетесь в качестве имени свойства использовать объект, а JS разрешает там только строки.
    Объект приводится к строке и ваш код превращается в итоге вот в это:
    dwayne['[object Object]'] = 123;
    dwayne['[object Object]'] = 456;
    
    console.log(dwayne['[object Object]']);

    Думаю, тут уже понятно, почему результат именно такой.

    При этом, если бы вы использовали другой синтаксис, то и результат был бы другим:
    dwayne.daniel = 123; // аналог dwayne['daniel']
    dwayne.jason = 456; // аналог dwayne['jason']
    
    console.log(dwayne.daniel);

    Но эти daniel и jason никак не связаны с одноимёнными объектами выше.
    Ответ написан
    1 комментарий
  • Не работает метод querySelectorAll, как исправить?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Метод querySelectorAll возвращает коллекцию элементов и у неё нет свойства onclick, метода addEventListener и т.п.
    По коллекции нужно итерировать и назначать обработчик события для каждого элемента в отдельности.
    Как это сделать, написано в каждом первом учебнике JavaScript.
    Ответ написан
    Комментировать
  • Как в composer в autoload добавить свою директорию?

    autoload
    Autoload mapping for a PHP autoloader.

    PSR-4 and PSR-0 autoloading, classmap generation and files includes are supported.

    PSR-4 is the recommended way since it offers greater ease of use (no need to regenerate the autoloader when you add classes).

    https://getcomposer.org/doc/04-schema.md#autoload
    Ответ написан
    Комментировать
  • Зачем комментарии на сайте оборачивать в тег article?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    его рекомендуют оборачивать тегом article
    Тут нужно дать ссылку на эту рекомендацию, чтобы мы могли её оценить не на уровне "Рабинович по телефону напел".

    его можно использовать в любом другом месте, а как использовать комментарий на другом сайте
    Когда говорят об использовании "в любом месте", подразумевают "любое место данного сайта". И в рамках сайта комментарий действительно может быть оторван от условного рецепта: например, в профиле пользователя может выводиться список всех его комментариев (как здесь) или в сайдбаре может выводиться список всех последних комментариев (как на vc.ru).

    На самом деле все эти семантические теги, введённые в HTML5, не оказывают абсолютно никакого влияния ни на что (за исключением небольшого количества функциональных тегов, которые упрощают доступность), так что вы можете не заморачиваться слишком сильно. Это не говоря про то, что семантика этих тегов жёстко привязана к конкретному сайту - то, что будет логично на одном, будет бредом на другом. Универсальных правил использования семантических тегов нет, есть рекомендации, которые вы вольны игнорировать.

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

    TLDR: Не хотите - не оборачивайте, не случится ровным счётом ничего. Это всего лишь рекомендация и примеры в них для семантических тегов иногда притянуты за уши, потому что эти теги в большинстве своём не решали какие-то реальные проблемы, а были введены для красоты, которая у каждого своя.
    Ответ написан
    7 комментариев
  • Как исправить ошибку при переходе на php 8.2 Битрикс?

    Любые подобные ошибки совместимости в ядре решаются только обновлением Битрикса.

    Ну а так, для общего развития: там явно баг и передаётся не та переменная:
    - $context = stream_context_create($query);
    + $context = stream_context_create($query_options);
    Ответ написан
  • Является ли это корректной записью?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Не является. Массив используется на хранения списка значений, в нём нет никаких "имён".
    Значения с "именами" можно хранить либо в объекте, либо в специальном типе Map.

    Но при этом, если речь про значения примитивных типов, то при их добавлении в объект или Map теряется связь с изначальной переменной, откуда значение было взято.

    let a = 3;
    let b = 15;
    
    let one = {};
    
    one.a = a;
    one.b = b;
    
    a = 42;
    
    console.log(one.a, one.b); // 3, 15
    console.log(a, b); // 42, 15


    let a = 3;
    let b = 15;
    
    let two = new Map();
    
    two.set('a', a);
    two.set('b', b);
    
    a = 42;
    
    console.log(two.get('a'), two.get('b')); // 3, 15
    console.log(a, b); // 42, 15
    Ответ написан
    Комментировать