• Как сделать слежение над файлом SCSS в GULP?

    @Flying
    У вас ошибка в строке 13: вместо app/scss/**/*/.scss должно быть app/scss/**/*.scss, другими словами у вас там слэш лишний.
    Ответ написан
    Комментировать
  • Symfony Eventlistener идет зацикливание?

    @Flying
    Вы вызываете EntityManager::flush() внутри обработчика события, который сам вызывается в процессе работы
    EntityManager::flush() (а точнее UnitOfWork::commit()), разумеется вы получаете бесконечный цикл.

    Корректным подходом будет реализация, которая накапливает информацию об изменениях и передаёт их для дальнейшего сохранения. Это можно сделать с помощью Doctrine event listener'а, который содержит в себе обработчики следующих событий:
    1. preFlush
    2. postPersist, postUpdate, postRemove
    3. postFlush


    Также, хотя механизмы сохранения изменений могут быть разными, с точки зрения уменьшения времени обработки запроса, логично отложить сохранение изменений "на потом", воспользовавшись поддержкой асинхронных очередей в Symfony Messenger.

    Таким образом ваш обработчик должен действовать примерно следующим образом:
    1. На событие preFlush вы очищаете внутреннюю переменную (например private array $changes = []), в которой будет
      накапливаться информация об изменениях
    2. Обрабатывая события postPersist, postUpdate, postRemove вы сохраняете в $changes
      информацию об изменениях, которую хотите сохранить
    3. В обработчике postFlush вы передаёте накопленные изменения, формируя message, для которого настроен роутинг в async транспорт. Обработчик этого message сможет спокойно сохранить все накопленные изменения, не мешая runtime коду.

    Ответ написан
    2 комментария
  • Как правильно отправлять почту через PHP?

    @Flying
    Очень странно, что письма, высланные через Mailgun имеют плохую доставляемость. Подобные сервисы как раз, в частности, и используют из-за того, что они нормально реализуют все стандартные средства идентификации отправителей, а также обладают хорошей репутацией с точки зрения spam list'ов и прочих сервисов мониторинга.

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

    Также не очень понятно само описание проблемы. "Из-за отсутствия шифрования" чего? Возможно вы просто что-то неправильно используете или не настроили?

    Возвращаясь к вопросу о библиотеках - я бы склонялся в сторону Symfony Mailer. Это "наследник" SWIFTMailer, который в свою очередь, думаю, был самым популярным решением для этой задачи на PHP, всё-таки больше 270 миллионов скачиваний, у PHPMailer в 10 раз меньше.

    Понятно, что Symfony Mailer хорошо интегрирован в сам Symfony, но он легко (хотя и менее удобно) используется и отдельно. Из несомненных плюсов данного подхода - возможность подключения различных транспортов (в том числе и того же Mailgun), что позволяет использовать разные методы отсылки писем без необходимости менять код. Также Symfony Mailer интегрируется с Symfony Messenger, который в свою очередь предоставляет mailer'у возможность асинхронной рассылки писем с retry стратегиями, отслеживанием ошибок отсылки и т.п.
    Ответ написан
    Комментировать
  • Как можно нормально смотреть стили элемента в браузере, если в них примеси переменных?

    @Flying
    Вам нужно определиться для чего именно вы хотите просматривать стили элемента.

    Если вы хотите видеть какие стили определены (т.е. из каких стилевых таблиц какой стиль приходит, как задан и т.п.) - то это вкладка Styles, она отображает данные из исходных стилевых таблиц.

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

    Судя по всему вы хотите какое-то промежуточное представление (вычисленное, но не совсем), но с точки зрения браузера такого состояния просто нет. Если же генерировать какое-то промежуточное представление - то, уверен, там начнётся масса веселья в случае редактирования.

    За Chrome не скажу, а в Firefox значение переменной показывается при hover'е, в целом удобно.

    Если вы считаете что такая функциональность необходима - вам стоит оформить запрос в виде bug report'а, благо bug tracker'ы для движков основных браузеров открыты (Chromium, Firefox, WebKit). Однако при описании подобного запроса вам стоит постараться лучше продумать предлагаемый вами сценарий реализации.
    Ответ написан
    2 комментария
  • Как исправить анимацию на gecko?

    @Flying
    На StackOverflow есть прекрасный ответ, описывающий причину и решение (точнее хак, но он помогает).

    Если вкратце - добавьте к вашей анимации микроскопический rotate:

    @keyframes animStar {
    	from {
    		transform: translateY(0) rotate(0.05deg);
    	}
    	to {
    		transform: translateY(-200vh) rotate(0.05deg);
    	}
    } ;


    UPD: Вот bugreport (до сих по откытый) по этому поводу и объясение от разработчика почему rotate() помогает.
    Ответ написан
    Комментировать
  • Gutenberg Как задать css класс по умолчанию блокам?

    @Flying
    Есть несколько вариантов решения:

    1. Патчинг HTML отрендеренного блока

    Самый простой в реализации, но далеко не самый стабильный вариант. Определите фильтр для рендера вашего типа блока, в данном случае:

    add_filter('render_block_core/video', function (string $content, array $block) {
        // Здесь вам нужно изменить содержимое переменной $content
        // она содержит уже отрендеренный HTML код блока.
        return $content;
    }, 10, 2);


    Для корректной работы с HTML лучше использовать расширение DOM.

    2. Переопределить рендер блока целиком

    Для этого вам нужно зарегистрировать блок с точно таким же названием и переопределить его рендер. Подробнее смотрите в документации.

    3. Сделать свой блок

    Также, через register_block_type определяете свой собственный блок и пишете свой рендер для него.
    Ответ написан
    Комментировать
  • Ошибка с библиотекой Route. В чем ошибка?

    @Flying
    Вы забыли импортировать компонент Routes, должно быть как-то так:
    import {Routes, Route} from 'react-router-dom';
    Ответ написан
  • Как быстро проверить какие пакеты имеют уязвимости в composer.json?

    @Flying
    Локально можно делать проверку так, как описано здесь.

    Но поскольку проверка уязвимостей должна быть постоянным процессом - лучше всё-таки использовать либо упомянутый вами roave/security-advisories либо, если ваш проект на GitHub - то через GitHub action.

    В конечном итоге все эти варианты опираются на один и тот же источник информации.
    Ответ написан
    Комментировать
  • Как отрефакторить классы с неоднородными конструкторами?

    @Flying
    Я бы использовал service locator для формирования списка сервисов и передавал его в конструктор фабрики.

    Альтернативно можно определить фабрику как service subscriber, тогда формирование service locator'а будет, возможно, ещё проще.

    Если же каким-то образом (например через общий интерфейс или статический метод класса-фабрики), определить список сервисов, которые умеет создавать фабрика, то можно создать compiler pass, который будет формировать service locator на этапе компиляции контейнера через анализ их зависимостей. Это чуть сложнее, но не потребует править код при расширении списка создаваемых фабрикой классов.
    Ответ написан
    Комментировать
  • Как подключить сторонние библиотеки сразу в scss, js файлы, если используешь gulp?

    @Flying
    Gulp - это не bundler, а task runner. Он просто запускает задачи и занимается их оркестрацией, что делают эти задачи - его вообще никак не касается.

    Используйте Gulp плагин для интеграции с нужным вам bundler'ом, к примеру webpack-stream.
    Ответ написан
    Комментировать
  • Mozilla не видит контуров svg(stroke), как пофиксить?

    @Flying
    У вас на группах висят некие фильтры (<g filter="url(#filter0_b_601:49)" id="fg-group">) которые и приводят к пропаданию обводок.

    Зачем он там применяется - не очень понятно, визуально отличий "с фильтром" и "без фильтра" я не увидел, но в частности там применяется feGaussianBlur. Убирание этого компонента фильтра (или всего фильтра) исправляет проблему.
    Ответ написан
    Комментировать
  • В чем разница между ModelTransformer и ViewTransformer?

    @Flying
    Информация об этом есть в документации.

    Если вкратце - разница состоит в том, как будет использоваться результат трансформации.
    • ModelTransformer преобразует данные элемента формы для сохранения в модели или получения данных из модели в форму,
    • ViewTransformer преобразует данные элемента формы для рендера во view или получения данных из запроса в форму,
    Ответ написан
    Комментировать
  • Тернарный оператор, ?? вместо ?:, зачем?

    @Flying
    Это совсем разные вещи.

    ?? - это null coalescing operator
    ?: - это ternary operator с первым выражением, эквивалентным выражению в левой части оператора.
    Ответ написан
    Комментировать
  • Особенности по миграциям в Symfony?

    @Flying
    В Symfony по-умолчанию используется Doctrine, для неё есть Doctrine Migrations.

    Поскольку Doctrine - data mapper, то вам не нужно "добавить к таблице колонку / индекс / поменять тип колонки", вместо этого вам нужно менять свои entities и mappings для них (подробнее здесь), а затем создать для неё миграцию, используя команду doctrine:migrations:diff для Symfony console. Т.к. команда работает на сравнении схем базы данных - в итоге вы получите миграцию с SQL скриптами для применения и отката изменений, внесённых в ваши mappings.
    Ответ написан
    6 комментариев
  • Как вызвать sass функцию и модифицировать глобальную переменную при каждом вызове миксина?

    @Flying
    Из документации Sass:

    If you need to set a global variable’s value from within a local scope (such as in a mixin), you can use the !global flag. A variable declaration flagged as !global will always assign to the global scope.


    В общем вам не хватет !global после присвоения.
    Ответ написан
    Комментировать
  • Почему не работает Gulp?

    @Flying
    У вас не установлен или не подключен gulp-sass.

    Более точно можно сказать только видя содержимое Gulpfile.js

    UPD: Причина наверняка в том, что версия gulp-sass ниже 5-й, поскольку синтаксис явного подключения компилятора появился только в 5-й версии. Нужно смотреть в package.json.
    Ответ написан
  • Firefox по истечении ~1часа сьедает всю доступную ОЗУ?

    @Flying
    about:memory даёт полный отчёт по тому как распределена память внутри браузера, смотрите туда. Там же можно получить отчёт по памяти, сохранить его, а затем загрузить для сравнения, так можно будет быстрее найти аномалии. Помимо этого там же можно запустить принудительную очистку памяти и сбор мусора.

    Подобное поведение нетипично. К примеру у меня сейчас открыто 8 окон и в них суммарно около 1500 вкладок, при этом браузер не выключается неделями. Потребление памяти очень стабильное, закрытие вкладок вызывает освобождение памяти.
    Ответ написан
    4 комментария
  • В каких случаях следует делать кастомные Exceptions?

    @Flying
    Собственные исключения необходимы в случаях, когда вы хотите обрабатывать (или, в случае если вы автор библиотеки - предоставить возможности обработки) какой-либо исключительный сценарий специальным образом. К примеру посмотрите, как организована работа с exceptions в Doctrine.

    Также собственные исключения могут пригодится в случае, если вы хотите передавать с этим исключением какую-то дополнительную информацию. К примеру посмотрите на exceptions для ответов разных HTTP статусов в Symfony.
    Ответ написан
    4 комментария
  • Если в интернет API, позволяющее получить адрес в формате ФИАС для строки свободного формата?

    @Flying
    У DaData есть API по стандартизации адресов, как часть ответа он возвращает код из ФИАС.
    Ответ написан
    Комментировать
  • Где и как предложить идею нового свойства CSS?

    @Flying
    Спецификаций CSS занимается рабочая группа в составе W3C. Там же есть и информация о том, как принять участие / предложить свою идею.

    К примеру вы можете создать issue в репозитории рабочей группы.

    Однако вам стоит понимать, что работа над спецификацией уровня CSS Grid - это многолетний труд сотен людей для того, чтобы довести её до реального использования. Если вы предполагаете что за всё это время никто из них не додумался до этой идеи - то вам стоит подумать ещё раз.

    Важно помнить, что в отличие от каких-то конкретный use cases которые были бы интересны для пользователей создатели спецификации сосредоточены на совершенно других вещах. Их цель - создание по возможности полного и непротиворечивого механизма, который при этом будет реалистичным в реализации и использовании.

    За примерами далеко ходить не нужно: parent selector - мечта уже нескольких поколений разработчиков и тема постоянных вопросов. Однако его нет в спецификации (хотя он был в первых драфтах CSS 3 насколько я помню) и скорее всего не будет. Причину, если интересно, попробуйте поискать сами.

    Или, к примеру, такое очевидное, казалось бы, опущение как отсутствие аналога :hover для "stuck" состояния элемента с position: sticky. Ведь его явно не хватает почти любому кто использовал этот стиль. Однако его не будет, о причинах (логичных, но далеко неочевидных) можно почитать в соответствующем issue.

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