• Пример паттерна стратегии на PHP?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    doctrine cookbook: strategy introduction
    Zend Hydrator
    Monolog - Handling strategy in Fingers Crossed handler
    В коде Зенда много стратегий, в других фреймворках тоже часто встречается, только в неявном виде
    Ответ написан
    Комментировать
  • Как уменьшить количество запросов?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Возможно лучшим выходом будет использование raw запросов с кучей джоинов, их проще контролировать и меньше оверхед
    Ответ написан
    Комментировать
  • Как уберечься от слишком частых ajax запросов?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Можно попробовать готовые библиотеки по ключу "rate limiter"
    https://packagist.org/?query=rate%20limiter
    Upd. Другой ключ - "throttling/request throttling"
    Ответ написан
    Комментировать
  • Как добавить исключение в php скрипт?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Ловить исключение нужно там, где функция может его выбросить, в Вашем случае я не вижу функций, которые это могут делать (потому что код в процедурном стиле с простыми функциями, а не ООП). Достаточно проверки на некорректные значения, как написал rPman.
    Ответ написан
    Комментировать
  • Как победить "Packets out of order. Expected 1 received 0. Packet size=145"?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Есть обсуждение, где человек тоже много страдал с этой проблемой, попробуйте увеличить max_connections в конфиге mysql
    https://stackoverflow.com/a/65040732/5371978
    Ответ написан
    Комментировать
  • Зачем нужен PHP Taint (испортить строку)?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Это функция для имитации строки с уязвимостью, чтобы вручную не воспроизводить эту уязвимость в натуральном виде. Мне кажется что эта статья из Psalm хорошо описывает смысл этой уязвимости и способы устранения (а значит и смысл существования функции)
    https://psalm.dev/articles/detect-security-vulnera...
    Ответ написан
    2 комментария
  • Как присвоить вычисленное значение константе?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    документация
    A constant is an identifier (name) for a simple value. As the name suggests, that value cannot change during the execution of the script (except for magic constants, which aren't actually constants).

    Тут два ответа сразу, почему не должно работать и не будет - константа не может принимать выражения и константа не должна меняться во время выполнения (у Вас она зависит от магической константы __DIR__)
    Ответ написан
    Комментировать
  • Как создать БД для чекбоксов?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Один из вариантов поиска:
    database design for checkbox values.
    Самые частые подходы - отдельная таблица с набором опций как колонок или же поле в основной таблице, где варианты ответов это побитовая маска.
    Ответ написан
    3 комментария
  • Как прописать специфичные для тест кейса определения в контейнер в API тестах?

    glaphire
    @glaphire
    PHP developer
    К сожалению я такую проблему не решала, но возможно подойтет ответ из ишью на гитхабе. Если нет, то надо попробовать грязно сеттить настройки окружения для тестов вплоть до рефлексии в каком-то setup/before методе (если разобраться, какие именно параметры надо подменить)
    Ответ написан
    Комментировать
  • Как удалить все шорткоды?

    glaphire
    @glaphire
    PHP developer
    Можно попробовать написать и единоразово запустить консольный скрипт, используя эту функцию - remove_all_shortcodes(), предварительно сделав бекап базы.
    Ответ написан
    Комментировать
  • Почему приходит сразу несколько писем с формы контактов?

    glaphire
    @glaphire
    PHP developer
    У Вас появляется по несколько обработчиков на одну форму, отсюда и множество отправок. Как минимум в файле index.js я увидела повторение кода обработчика. Посмотрите, где он повторяется, добавьте промежуточные данные для дебага через консоль в инструментах разработчика в хроме
    608845938044e967245094.png
    Ответ написан
  • Как правильно формировать структуру сайта?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Должен быть базовый layout (где есть блоки со статичным контентом) и файлы динамических блоков, которые его расширяют - так придется единожды менять футер/хедер/меню и по потребности - страницы с контентом. Это очень удобно реализовано в шаблонизаторах вроде blade и twig (они на 80% похожи)
    Ответ написан
    1 комментарий
  • Почему непонятные пробелы в консоли?

    glaphire
    @glaphire
    PHP developer
    В типе данных character пустая часть поля заполняется пробелами, они и портят консольный вывод данных
    https://www.postgresql.org/docs/9.1/datatype-chara...
    Ответ написан
    3 комментария
  • Как научиться объяснять?

    glaphire
    @glaphire
    PHP developer
    В контексте разработки полезно сначала узнать, понимает ли собеседник концепции, на которых строится объяснение (нп. какой смысл говорить в контексте SOLID или DDD, если человек о них никогда не слышал и не читал), а потом пошагово объяснить решение на уровне тех концепций, которые человек точно понимает. Часто встречается такая проблема, что объясняющий не дает слова встатить, и когда он уже закончил, то все равно теряется нить первых вопросов и приходится спрашивать все сначала)
    Ответ написан
    Комментировать
  • Как в Jira сделать древовидный вывод комментариев?

    glaphire
    @glaphire
    PHP developer
    В настройках вряд ли этот пункт есть, но можно глянуть плагины
    https://marketplace.atlassian.com/apps/1212145/thr...
    Ответ написан
  • Как сделать ежедневную смену даты публикации 2х постов в wordpress при помощи php и cron?

    glaphire
    @glaphire
    PHP developer
    Вы можете написать этот скрипт независимо от возможностей wordpress. Тут достаточного голого php и голых sql запросов через pdo. Это два update запроса. Добавление скрипта в crontab это тоже одна строчка для добавления (очень много есть примеров, был даже интерактивный сайт, который на лету описывал расшифровку частоты запуска крона)
    Ответ написан
    Комментировать
  • Как вырезать белый фон из объекта?

    glaphire
    @glaphire
    PHP developer
    В панели настроек выделения должен быть параметр точности (tolerance) - насколько можно пренебрегать отличиями соседних пикселей, надо свести его к минимуму (0-10, у меня по-умолчанию было 25)
    Ответ написан
    Комментировать
  • Хорошо ли использовать DTO в качестве объекта реквеста для api?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    DTO просто помогает отвязаться от прямой работы с сущностью/моделью и выносить туда всю предварительную инициализацию/обработку/валидацию, получается как дополнительный слой ответственности передачи данных, чтобы не решать это на уровне тех же моделей/сущностей или сервисов.
    С DTO на разных сторонах двух микросервисов вопрос сложный)
    ParamConverter (и ArgumentResolver) это дополнительные прослойки в жизненном цикле запроса симфони, это просто разруливатели сырых параметров запроса и их валидация/преобразование в объекты до этапа попадания в экшен контроллера. Судя по документации, в Yii2 такого функционала нет и действительно надо делать самому или упрощать его.
    Ответ написан
    8 комментариев
  • Переработка в маленьких IT-компаниях?

    glaphire
    @glaphire
    PHP developer
    У меня в самой первой компании, где были мелкие дешевые заказы и аутсорс, было четкое разделение на работу бекендера и фронтендера (разве что js иногда приходилось дописывать или править), а в крупной компании на энтерпрайз проекте приходилось фуллстечить, поэтому закономерность весьма условная. Лучше при поиске работы четко проговорить, что хотите работать только с бекендом, потому что много где пытаются добавить работу с джс фреймворком и версткой, чтобы сэкономить на поиске отдельных фронтендеров
    Ответ написан
    Комментировать
  • Может ли кто-то проревьюить ООП код на PHP (тестовая задача, Symfony)?

    glaphire
    @glaphire
    PHP developer
    Мне кажется что тестовое сделано хорошо, но есть вещи которые немного некомфортны для потенциального проверяющего:
    1) Хорошо бы было все команды по поднятию проекта завернуть в Makefile или bash сценарий
    2) EmployeeScheduleController Аннотация Route на уровне класса это похоже на оверхед здесь, потому что только два эндпоинта и пустой роут над getWorkSchedule сразу пугает)) И private методы лучше сместить все вниз или вынести в базовый контроллер.
    3) Employee создание класса Time тоже больше похоже на оверхед, с одной стороны хорошо, что все ограничения инкапсулированы в одном классе, с другой стороны операции с DateTime как-то более интуитивны.
    4) EmployeeRepository Метод loadEmployeesFromFile() это точно не зона ответственности доктриновского репозитория, это отдельный класс, обычно сервис. Репозиторий это слой чтения из хранилища, а тут процесс записи.
    5) DayFactory, TimeFactory, TimeRangeFactory и их интерфейсы кажутся очень большим оверхедом, потому что на небольшую логику созданы три класса и три интерфейса, про которые надо помнить и проверять их содержимое для поддержания общей линии приложения.
    6) Обычно в симфони стараются придерживаться прямолинейной структуры папок, внутри Service есть Builder, ExternalApi, Factory и Validation - это разные группы задач и точно не сервисы, стоило бы оставить их в неймспейсе App (папке src) или выделить папку Module/Scheduler и создавать эти папки там.
    7) Calendar - у этого класса зона ответственности это быть апи клиентом, можно его переименовать в CalendarApiClient, чтобы однозначно понимать что он дергает внешнее апи, а не просто сущность, как-то связанная с другим апи.
    8) Validation - это необязательно, но обычно стараются по-максимуму использовать компонент Validator и логику дополнительных проверок строить вокруг него
    9) ScheduleDirector может я раньше не встречалась с такой группой классов, но Director звучит контринтуитивно, Service или Manager немного привычнее и предсказуемее.
    Тут есть противоречние - свойство scheduleBuilder не сеттится сразу, хотя оно необходимо для фунционирования, при этом его надо сеттить обязательно через сторонний метод. В симфони можно сконфигурировать класс заранее в services.yaml, задать ему алиас и уже готовый инжектить в нужный класс. Немного странно видеть исключения BadRequestHttpException, NotFoundHttpException в классе, зоной ответственности которого не является работа с http напрямую)
    10) EmployeeNonWorkScheduleControllerTest - зачем использовать в качестве названий переменных подчеркивания? Может это ошибка? Просто выглядит очень странно)
    11) В комментариях упоминали добавить коллекцию постмана, это было бы желательно
    Ответ написан
    9 комментариев