Как стать автором
Поиск
Написать публикацию
Обновить
7.83

Symfony *

Свободный фреймворк, написанный на PHP5

Сначала показывать
Порог рейтинга
Уровень сложности

Реализация SOLID на примере

Уровень сложностиСложный
Время на прочтение3 мин
Количество просмотров9.1K

Рассмотрим на простом и наглядном примере реализацию SOLID на Symfony. Будет так же ссылка на Github. Допустим, нужно реализовать импорт товаров из внешнего сервиса...

Читать далее

Symfony под капотом: Symfony Messenger и механизм повторной обработки сообщений при ошибках

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров7.9K

При работе с интеграциями мы часто имеем дело со сбоями в сторонних сервисах, и нам очень важна возможность восстановления после таких ошибок.

В этой статье я расскажу о том, как в Messenger-компоненте Symfony устроен механизм повторной обработки сообщений при ошибках (или по-простому – механизм ретраев), а также поделюсь опытом его использования и некоторыми важными нюансами его работы.

Читать далее

Наводим порядок в наших миграциях

Время на прочтение4 мин
Количество просмотров4K

Миграции баз данных — это отличный способ безопасно обновить схему базы данных. Это именно то, что нам нужно в продакшене, ведь терять имеющиеся там данные крайне нежелательно. В этой статье я хочу поделиться с вами советом, который поможет навести порядок в ваших миграциях. Конечно, стоит сразу оговориться, что это представляет проблему в основном для локальной разработки: на продакшене нас не очень волнует, сколько файлов миграции было выполнено в прошлом.

Читать далее

Загрузка ассоциаций по запросу в Symfony

Время на прочтение5 мин
Количество просмотров4.5K

Всех приветствую!

Стандартно Doctrine загружает сущности отложено (Lazy load). Это означает, что данные взаимосвязей фактически не загружаются до тех пор, пока не будет явный вызов свойства. Механизмы Doctrine позволяют изменить поведение и загружать связи во время запроса к родительской сущности (fetch:'EAGER'), однако это не совсем подходит для динамической загрузки ассоциаций по запросу.

В статье я бы хотел поговорить о том, как реализовать функционал загрузки ассоциаций по запросу средствами Symfony, на примере (не)выдуманной задачи.

Читать далее

Вы вообще нормальн… нормализованный??

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров5.6K

Сказ о том, нормализация данных завела производительность many-to-many в postgres в тупик, как это зло было повержено, и как тут нам помог Clickhouse.

Порой бывают ситуации, когда стоит посмотреть на задачу будто с нуля и отбросить предыдущий опыт и best practices. Подумать на несколько шагов вперёд. И лучше до того, когда уже вышли из SLA или нахватали негатива от клиентов или бизнеса. Об одной такой задаче и стандартном решении, которое пришлось больно редизайнить, хочется и поделиться с сообществом в этой статье.

Читать далее

Как мы планировали повысить версию PHP за месяц, а потратили на это год

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров27K

Как и множество больших сервисов, Яндекс Еда основана на микросервисной архитектуре. В общей сложности у нас чуть больше 200 микросервисов. Но есть один сервис, который совсем не микро – легаси-монолит.

Он написан на PHP 7.2 разработчиками разного уровня и в разное время. Мы подумали, что так больше нельзя, и решили навести порядок. В ходе разбирательств выяснилось, что версия языка, на котором всё написано, устарела и уже не поддерживается, что ведёт к рискам безопасности. Делать нечего — мы приняли решение обновиться до 8-й версии.

В этой статье я расскажу, чего стоило нам проапгрейдить монолит, сколько тестов мы сломали и как в этом проекте поучаствовали почти все PHP-разработчики Яндекс Еды. Это интересный и уникальный опыт, которым я хотел бы с вами поделиться. В конце дам несколько советов тем, кто тоже захочет ввязаться в подобную авантюру.

Читать далее

EasyAdmin и Mercure: реальный юзкейс

Время на прочтение8 мин
Количество просмотров4.2K

EasyAdmin — один из самых популярных генераторов административных панелей, доступных для Symfony-приложений. Поскольку для аутентификации пользователей он использует стандартный компонент безопасности Symfony, он позволяет входить в систему и изменять данные множеству пользователей одновременно. Но есть одна проблема…

Читать далее

Symfony Json RPC API Bundle — простое API со всем необходимым

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3.1K

Как легко и быстро развернуть API на фреймворке Symfony с уже встроенной валидацией и авторизацией по токену?

Можно воспользоваться бандлом для Symfony 6+

Посмотреть на packagist

Посмотреть на gitflick

Читать далее

Гайд 2023 Xdebug в PHPSTORM + Virtual server + Docker для macOS с пробросом портов

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров6.1K

Предварительно необходимо убедиться, чтобы в контейнере под php-fpm у вас был пакет Xdebug. Нужно либо установить в ручную, либо зашить в Dockerfile - конечно же второе будет лучше, т.к не придется при перезапуске делать одно и то же действие с установкой.

Мой DockerFile пример с командами установщика

Читать далее

Как написанный на Symfony Kbin покоряет Threadiverse

Время на прочтение7 мин
Количество просмотров1.8K

Из-за недавнего скандала с Reddit и его недальновидным CEO опенсорсные альтернативы сейчас переживают настоящий бум. И kbin — это как раз такая Fediverse-платформа, созданная с применением Symfony, API Platform и Schema Generator 3 Эрнестом Вишневски (Ernest Wiśniewski). Это именно то, на что вам нужно обратить свое внимание в первую очередь, если вы больше не хотите поддерживать самодуров, управляющих Reddit.

Читать далее

Использование ICU Message Format в PHP

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3.8K

Недавно я узнал про довольно интересный инструмент, встроенный в РНР. Оказывается, в языке нативно поддерживается универсальный формат шаблонов для сообщений, ICU Message Format. В частности, он используется в Symfony Translation Component и в системе интернационализации фреймворка Yii 2. Однако этот функционал доступен и сам по себе, в чистом РНР. И может использоваться не только для создания многоязычных сайтов, но и в качестве простенького шаблонизатора, например для email-рассылок.

Я решил разобраться с ним поподробнее

Делюсь опытом участия в хакатоне от Совкомбанка

Время на прочтение12 мин
Количество просмотров4K

Сегодня, я хочу поделиться опытом и рассказать про участие в хакатоне от совкомбанка. Подробнее про хакатон можно почитать тут. Для лл я вкратце опишу задачу — командой до 5 человек сделать внутренний сервис для подбора персонала и ведения HR деятельности.

Читать далее

Как мы разрабатывали сервис расчета стоимости доставки для ритейлера

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.8K

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

Меня зовут Артём Кияшко, я руковожу группой аналитиков в крупной ИТ-компании. В этой статье расскажу о том, как мы разработали и внедрили сервис расчёта стоимости доставки. 

Читать далее

Ближайшие события

Попрощайтесь с проверками на null и исключениями: использование монады Maybe в Symfony

Время на прочтение3 мин
Количество просмотров7.9K

Функциональное программирование появилось не вчера. Но оно так и не приобрело какой-либо дикой популярности, и, вероятно, не просто так. Иногда оно может быть довольно сложным с точки зрения понимания и использования. Но у него есть много преимуществ. Одним из них является возможность избежать проверок на null и исключений.

В этой статье мы рассмотрим монаду Maybe и то, как ее можно использовать в Symfony.

Читать далее

Чистая архитектура на практике

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров15K

Для начала хотелось бы затронуть так называемую «микросервисную архитектуру», которая стала довольно популярной. Но называть её архитектурой не совсем корректно, как заметил Роберт Мартин в своей книге «Чистая архитектура». Микросервис — это один из способов представления компонента общего приложения. Но архитектура, взаимодействие между компонентами, при этом может остаться такой же. Под компонентом понимается наименьшая единица развёртывания — пакет, библиотека или отдельное приложение, сервис, микросервис. В книге критикуется данная «микросервисная архитектура», а точнее, неправильное и неуместное её применение, которое есть во многих случаях и влечёт за собой негативные или крайне негативные последствия для проекта, и происходит «благодаря» низкой компетентности разработчиков или управляющих, которые хотят найти несуществующую здесь «серебряную пулю».

В книге «Чистая архитектура» выделяется два основных слоя: инфраструктура и бизнес-логика. В различной литературе выделяют и другие слои, но какой-то относительно чёткой информации об этом я не встречал. Под инфраструктурой будем понимать логику более характерную для многих приложений, не только для данного, какие-то конкретные интеграции со сторонними компонентами, а также подготовку данных для бизнес-логики. Под бизнес-логикой — логику более характерную для данного приложения она и представляет наибольшую ценность, её нужно стараться выделять, делать более независимой от инфраструктуры. Во-первых, чтобы было проще её читать, тестировать, модифицировать, а во-вторых, чтобы была возможность с наименьшими затратами заменить инфраструктуру или её части, если потребуется.

Читать далее

Автоматическое масштабирование потребителей Symfony в Kubernetes [Практическое руководство]

Время на прочтение6 мин
Количество просмотров1.7K

Мы в Debricked уже достаточно давно используем Symfony на нашем веб-сервере. За все это время он очень хорошо послужил нам, и когда разработчики Symfony анонсировали компонент Messenger в Symfony 4.1, мы уже с нетерпением ждали, когда сможем опробовать его. С тех пор мы использовали этот компонент для отправки электронных писем в асинхронную очередь.

Однако недавно у нас возникла необходимость вынести обработку событий GitHub, которые мы получаем из нашей интеграции с GitHub, из нашего веб-сервера в отдельный микросервис (чтобы повысить производительность). Мы решили прибегнуть к паттерну производитель/потребитель (producer/consumer), который предоставляет компонент Messenger, поскольку он позволит нам асинхронно отправлять различные события в очередь, а затем немедленно подтверждать их прием в GitHub.

Читать далее

Symfony + Filebeat + Elasticsearch

Время на прочтение3 мин
Количество просмотров4.6K

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

Читать далее

Оптимизация бэкенда приложения с примерами на Symfony. Часть 2

Время на прочтение20 мин
Количество просмотров12K

Всех приветствую!

Это продолжение серии статей, где мы рассмотрим еще несколько методов, которые помогут улучшить производительность приложения. Мы поговорим о том, как использовать entity manager, unit of work, bulk inserts и batching processing для более эффективной работы с базой данных.

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

В предыдущей статье мы говорили о проблеме n+1, видах пагинации и индексах. Там же Вы можете найти описание приложения, репозиторий проекта и схему данных.

Читать далее

Все о Pimcore

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров13K

Pimcore — мощная open‑source MDM (и не только) система, с которой у меня накопился немалый опыт. В компании SVK.Digital, в которой я являюсь техническим директором, мы занимаемся заказной разработкой и автоматизацией бизнеса, и уже несколько лет внедряем PIMcore на крупных предприятиях. В этой статье я хотел поделиться своим опытом, познакомив читателя с возможностями этого приложения.

Мне даже немного обидно, что в рунете незаслуженно мало информации об этом замечательном продукте. Хоть его и можно обозвать неприличным словом low‑code в какой‑то мере, но мне даже как программисту нравится работать с Pimcore (дальше по тексту расскажу о важных для меня особенностях), да и простор для программирования огромный.

Читать далее

Оптимизация бэкенда приложения с примерами на Symfony. Часть 1

Время на прочтение6 мин
Количество просмотров6.6K

Всех приветствую! Я планирую создать цикл статей, демонстрирующий распространенные ошибки, влияющие на производительность приложения со стороны бэкенда, а также методы их поиска и устранения. Для этого, я написал приложение, в котором специально допустил различные ошибки, чтобы по порядку найти и исправить их.

В текущей статье, рассмотрим темы - n+1, пагинация и индексы. Приятного чтения!

Описание приложения

Рассматриваемый проект - это веб-журнал посещений различных мест людьми с возможностью выгрузки и загрузки журнала в формате XML. Пользователь может загрузить журнал посещений в формате XML через форму на странице /upload, и на основе информации из файла будет заполнена база данных. Вся информация о посещениях будет отображаться на главной странице /index. Экспорт из системы осуществляется через команду, которая преобразует информацию из системы в формат XML и выгружает ее в файл (data.xml).

Читать далее