🧠 Монолит или Web API? Проверим на практике
Представьте ситуацию 👇
Вы начинаете новый PHP-проект с нуля.
Есть бизнес-идея, сроки поджимают, команда не бесконечная.
Вопрос не теоретический — архитектурный.
👉 Какой подход вы выберете и почему?
🅰️ Монолит
Быстрее старт
Проще деплой
Меньше инфраструктурного шума
🅱️ Web API + клиент
Чёткие контракты
Готовность к мобильным приложениям
Проще масштабировать команды
🅾️ Модульный монолит (гибрид)
Один репозиторий
Внутренние API/DTO
Возможность без боли выделить API позже
🅿️ Зависит от контекста
Размер команды
Тип продукта
Планируемый рост
Условия (чтобы было честно):
PHP (Laravel / Symfony — не важно)
1–2 месяца на MVP
Возможен рост продукта, но не гарантирован
Продакшн, а не pet-project
💬 Напишите в комментариях:
1️⃣ Что выберете первым шагом
2️⃣ При каком триггере поменяете архитектуру
3️⃣ Какой самый болезненный опыт у вас был: с монолитом или с API
#элементарный_выбор
Библиотека пхпшника
Представьте ситуацию 👇
Вы начинаете новый PHP-проект с нуля.
Есть бизнес-идея, сроки поджимают, команда не бесконечная.
Вопрос не теоретический — архитектурный.
👉 Какой подход вы выберете и почему?
🅰️ Монолит
Быстрее старт
Проще деплой
Меньше инфраструктурного шума
🅱️ Web API + клиент
Чёткие контракты
Готовность к мобильным приложениям
Проще масштабировать команды
🅾️ Модульный монолит (гибрид)
Один репозиторий
Внутренние API/DTO
Возможность без боли выделить API позже
🅿️ Зависит от контекста
Размер команды
Тип продукта
Планируемый рост
Условия (чтобы было честно):
PHP (Laravel / Symfony — не важно)
1–2 месяца на MVP
Возможен рост продукта, но не гарантирован
Продакшн, а не pet-project
💬 Напишите в комментариях:
1️⃣ Что выберете первым шагом
2️⃣ При каком триггере поменяете архитектуру
3️⃣ Какой самый болезненный опыт у вас был: с монолитом или с API
#элементарный_выбор
Библиотека пхпшника
Loupe
Полнотекстовая поисковая система с токенизацией, стеммингом, устойчивостью к опечаткам, фильтрами и географической поддержкой, основанная на чистом PHP и SQLite.
🔗 Github
Библиотека пхпшника
#инструменты
Полнотекстовая поисковая система с токенизацией, стеммингом, устойчивостью к опечаткам, фильтрами и географической поддержкой, основанная на чистом PHP и SQLite.
🔗 Github
Библиотека пхпшника
#инструменты
🧹 How-to: навести порядок в PHP-проекте с PHP CS Fixer
PHP CS Fixer — инструмент, который автоматически приводит код к единому стилю.
Он убирает хаос с отступами, кавычками, импортами и форматированием — и делает код читаемым и предсказуемым для всей команды.
Зачем нужен единый стиль
👀 Читаемость — код воспринимается быстрее, без лишней когнитивной нагрузки
🤝 Code review без споров — больше никаких обсуждений табов и скобок
🧱 Поддерживаемость — код выглядит так, будто у него один автор
🚀 Быстрый онбординг — новички не привыкают к «местным традициям»
🐛 Меньше ошибок — отклонения от нормы сразу бросаются в глаза
Почему именно PHP CS Fixer
единые правила для всей команды
автоматическое исправление стиля
экономия времени на ревью
профессиональный, индустриальный вид кода
Как начать
1. Добавьте PHP CS Fixer как dev-зависимость
2. Создайте конфигурацию в корне проекта
3. Используйте безопасные правила без изменения поведения кода
4. Исключите служебные и vendor-директории
Лучший старт — стандарт PSR-12 с минимальными дополнениями.
Как встроить в работу
Подход 1: форматирование отдельным коммитом
Сначала логика — потом единый коммит со стилем. История остаётся чистой.
Подход 2: контроль через CI/CD
Пайплайн проверяет стиль и подсказывает разработчику, что нужно поправить до merge.
👉 Medium
Библиотека пхпшника
PHP CS Fixer — инструмент, который автоматически приводит код к единому стилю.
Он убирает хаос с отступами, кавычками, импортами и форматированием — и делает код читаемым и предсказуемым для всей команды.
Зачем нужен единый стиль
👀 Читаемость — код воспринимается быстрее, без лишней когнитивной нагрузки
🤝 Code review без споров — больше никаких обсуждений табов и скобок
🧱 Поддерживаемость — код выглядит так, будто у него один автор
🚀 Быстрый онбординг — новички не привыкают к «местным традициям»
🐛 Меньше ошибок — отклонения от нормы сразу бросаются в глаза
Почему именно PHP CS Fixer
единые правила для всей команды
автоматическое исправление стиля
экономия времени на ревью
профессиональный, индустриальный вид кода
Как начать
1. Добавьте PHP CS Fixer как dev-зависимость
2. Создайте конфигурацию в корне проекта
3. Используйте безопасные правила без изменения поведения кода
4. Исключите служебные и vendor-директории
Лучший старт — стандарт PSR-12 с минимальными дополнениями.
Как встроить в работу
Подход 1: форматирование отдельным коммитом
Сначала логика — потом единый коммит со стилем. История остаётся чистой.
Подход 2: контроль через CI/CD
Пайплайн проверяет стиль и подсказывает разработчику, что нужно поправить до merge.
👉 Medium
Библиотека пхпшника
⌨️ Топ-вакансий по PHP за неделю
PHP-разработчик — от 180 000 до 250 000 ₽, Удалёнка (Москва)
Middle FullStack Developer (PHP / Laravel / Vue) — от 150 000 ₽, Удаленка (Москва)
Middle / Senior PHP Developer — Договорная, Удалёнка/Офис (Кипр)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
PHP-разработчик — от 180 000 до 250 000 ₽, Удалёнка (Москва)
Middle FullStack Developer (PHP / Laravel / Vue) — от 150 000 ₽, Удаленка (Москва)
Middle / Senior PHP Developer — Договорная, Удалёнка/Офис (Кипр)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
MoonShine 4: AI-инструменты, Tailwind 4 и новый UI — большой разбор релиза open source админ панели
Tailwind 4, дизайн-токены, AI-генерация через Claude Code, Telegram Mini App, модульная архитектура CRUD, 20+ палитр из коробки и генератор собственных. MoonShine 4 большое обновление админ панели для проектов на Laravel и других фреймворках. Вместо часов настройки полей — один промпт. Вместо танцев с CSS — система дизайн-токенов. Вместо мобильного приложения — интеграция с Telegram. За 11 месяцев разработки было переосмыслено то, как должна создаваться админ-панель в 2025 году. Внутри — полный технический разбор.
🔗 Хабр
Библиотека пхпшника
Tailwind 4, дизайн-токены, AI-генерация через Claude Code, Telegram Mini App, модульная архитектура CRUD, 20+ палитр из коробки и генератор собственных. MoonShine 4 большое обновление админ панели для проектов на Laravel и других фреймворках. Вместо часов настройки полей — один промпт. Вместо танцев с CSS — система дизайн-токенов. Вместо мобильного приложения — интеграция с Telegram. За 11 месяцев разработки было переосмыслено то, как должна создаваться админ-панель в 2025 году. Внутри — полный технический разбор.
🔗 Хабр
Библиотека пхпшника
❤8👍1
🧠 Продвинутый кеш для запросов и HTTP-ответов
⚡ 1) Кеширование данных/результатов запросов в Laravel
Laravel предоставляет единый API для работы с кешем — Redis, Memcached, DynamoDB, файл-драйвер и другие хранилища доступны «из коробки».
Это позволяет кешировать результаты тяжёлых запросов или вычислений, чтобы не выполнять их повторно при каждом HTTP-запросе.
Пример:
🔹
⚡ 2) Полное кеширование HTTP-ответов (Response Cache)
Для страниц или API-эндпоинтов, результат которых редко меняется, можно кешировать весь HTTP-ответ. Это значит: тот же запрос не будет обрабатываться Laravel/Symfony — ответ будет браться из кеша.
🤝 Laravel
Существуют готовые пакеты (например, spatie/laravel-responsecache), которые автоматически кешируют весь ответ для GET-запросов:
Пакет будет сохранять ответы и отдавать кешированные данные без обработки контроллера.
📍 Это даёт максимальное ускорение на страницах/эндпоинтах, которые не зависят от частых изменений — например, список товаров, главные страницы, публичные API.
⚡ 3) HTTP-кеширование через заголовки
Можно использовать HTTP-кеширование на уровне клиента и прокси: браузеры или CDN будут хранить ответы и не обращаться к серверу.
Пример установки заголовков в Laravel:
🔹
🔹 ETag позволяет клиенту проверить, изменился ли ресурс, без загрузки полного тела ответа.
📈 Такой подход особенно эффективен для API с часто повторяющимися запросами — уменьшает количество запросов к серверу и снижает нагрузку на процессор и базу.
⚡ 4) HTTP-кеширование в Symfony
Symfony поддерживает стандартизированное HTTP-кеширование (RFC 7234): можно настраивать TTL, validation-кеш, работу через обратные прокси.
Пример для компонента Symfony:
🔹 Symfony может работать с reverse proxy (gateway cache), например с Varnish или встроенным HttpCache, что позволяет обходить приложение полностью при совпадении кеша.
📦 Такой кеш особенно полезен для статичных страниц, публичных API или фрагментов, которые долго остаются неизменными.
⚡ 5) Низкоуровневые кеш-стратегии
Помимо кеширования данных и ответов, можно:
🔹 кешировать вычисления, агрегации и подготовленные отчёты;
🔹 кешировать результаты внешних API-вызовов, чтобы не дергать их при каждом запросе;
🔹 кешировать конфигурацию/маршруты, чтобы уменьшить накладные расходы на bootstrap.
🧠 Когда это эффективно
✅ Высокая нагрузка на API/сервер
✅ Часто повторяющиеся запросы к одним и тем же данным
✅ Страницы, результаты поиска, публичные каталоги
✅ Обслуживание данных, которые редко меняются
⚠️ Что важно учитывать
⚠️ Если данные меняются часто — кеш нужно инвалидировать своевременно
⚠️ Неразумное кеширование может привести к устаревшим ответам
⚠️ Не все маршруты подходят для полного HTTP-кеша — динамические, приватные, зависящие от сессии должны быть исключены
Библиотека пхпшника
⚡ 1) Кеширование данных/результатов запросов в Laravel
Laravel предоставляет единый API для работы с кешем — Redis, Memcached, DynamoDB, файл-драйвер и другие хранилища доступны «из коробки».
Это позволяет кешировать результаты тяжёлых запросов или вычислений, чтобы не выполнять их повторно при каждом HTTP-запросе.
Пример:
use Illuminate\Support\Facades\Cache;
$products = Cache::remember('products.active', 3600, function () {
return Product::where('active', true)->get();
});
🔹
remember() проверяет наличие ключа в кеше → если нет — выполняет запрос, сохраняет результат → использует кеш до истечения TTL (в секундах).⚡ 2) Полное кеширование HTTP-ответов (Response Cache)
Для страниц или API-эндпоинтов, результат которых редко меняется, можно кешировать весь HTTP-ответ. Это значит: тот же запрос не будет обрабатываться Laravel/Symfony — ответ будет браться из кеша.
🤝 Laravel
Существуют готовые пакеты (например, spatie/laravel-responsecache), которые автоматически кешируют весь ответ для GET-запросов:
composer require spatie/laravel-responsecacheПакет будет сохранять ответы и отдавать кешированные данные без обработки контроллера.
📍 Это даёт максимальное ускорение на страницах/эндпоинтах, которые не зависят от частых изменений — например, список товаров, главные страницы, публичные API.
⚡ 3) HTTP-кеширование через заголовки
Можно использовать HTTP-кеширование на уровне клиента и прокси: браузеры или CDN будут хранить ответы и не обращаться к серверу.
Пример установки заголовков в Laravel:
return response()->json($product)
->header('Cache-Control', 'public, max-age=3600')
->setEtag(md5($product->updated_at));
🔹
Cache-Control указывает, как долго браузер/CDN может хранить ответ.🔹 ETag позволяет клиенту проверить, изменился ли ресурс, без загрузки полного тела ответа.
📈 Такой подход особенно эффективен для API с часто повторяющимися запросами — уменьшает количество запросов к серверу и снижает нагрузку на процессор и базу.
⚡ 4) HTTP-кеширование в Symfony
Symfony поддерживает стандартизированное HTTP-кеширование (RFC 7234): можно настраивать TTL, validation-кеш, работу через обратные прокси.
Пример для компонента Symfony:
$response = new Response($content);
$response->setSharedMaxAge(3600); // кеш прокси
return $response;
🔹 Symfony может работать с reverse proxy (gateway cache), например с Varnish или встроенным HttpCache, что позволяет обходить приложение полностью при совпадении кеша.
📦 Такой кеш особенно полезен для статичных страниц, публичных API или фрагментов, которые долго остаются неизменными.
⚡ 5) Низкоуровневые кеш-стратегии
Помимо кеширования данных и ответов, можно:
🔹 кешировать вычисления, агрегации и подготовленные отчёты;
🔹 кешировать результаты внешних API-вызовов, чтобы не дергать их при каждом запросе;
🔹 кешировать конфигурацию/маршруты, чтобы уменьшить накладные расходы на bootstrap.
🧠 Когда это эффективно
✅ Высокая нагрузка на API/сервер
✅ Часто повторяющиеся запросы к одним и тем же данным
✅ Страницы, результаты поиска, публичные каталоги
✅ Обслуживание данных, которые редко меняются
⚠️ Что важно учитывать
⚠️ Если данные меняются часто — кеш нужно инвалидировать своевременно
⚠️ Неразумное кеширование может привести к устаревшим ответам
⚠️ Не все маршруты подходят для полного HTTP-кеша — динамические, приватные, зависящие от сессии должны быть исключены
Библиотека пхпшника
❤1
🐘 PHP для начинающих: зачем нужен
он генерирует код, управляет БД, помогает с отладкой и обслуживанием проекта.
Если вы работаете с Laravel и не используете artisan — вы тратите время впустую.
1️⃣ Контроллеры
🔹 Обычный контроллер
Что делает: создаёт пустой контроллер
Когда использовать: нужен полный контроль над методами
🔹 Resource-контроллер (CRUD)
Создаёт методы:
Идеально для: MVC-приложений
Работает в паре с:
🔹 API Resource-контроллер
Без
Для: REST API (JSON, Sanctum, JWT)
🔹 Invokable-контроллер
Один метод
Для: одного действия, чистые роуты
2️⃣ Представления (Blade)
🔹 View
Создаёт
🔹 Blade-компонент
Для: переиспользуемых UI-элементов
Пример:
3️⃣ Модели и база данных
🔹 Модель
Часто используемые флаги:
🔹 Информация о модели (Laravel 10+)
Показывает таблицу, поля, связи, casts
Очень полезно для отладки
4️⃣ Миграции
Запуск конкретной миграции:
5️⃣ Seeders (данные)
Для: тестовых и стартовых данных
6️⃣ Валидация и middleware
Используется для:
валидации, авторизации, фильтрации запросов
7️⃣ Аутентификация и API
Устанавливает Laravel Sanctum и API-авторизацию
Gates и Policies
8️⃣ Почта
Emails и уведомления
9️⃣ Настройка и обслуживание
🔟 Роутинг и отладка
Для: поиска конфликтов и middleware
1️⃣1️⃣ Локализация и stubs
Stubs — шаблоны для
Можно кастомизировать стиль проекта
1️⃣2️⃣ Кэш и оптимизация
Для продакшена и странных багов
1️⃣3️⃣ Очереди и задачи
1️⃣4️⃣ Policies
⭐ 1️⃣5️⃣ Tinker (обязательно знать)
Интерактивный REPL
Можно выполнять Laravel-код, запросы, сервисы прямо в консоли
Библиотека пхпшника
#php_азбука
php artisan и как им пользоватьсяphp artisan — это CLI-интерфейс Laravel, который ускоряет разработку:он генерирует код, управляет БД, помогает с отладкой и обслуживанием проекта.
Если вы работаете с Laravel и не используете artisan — вы тратите время впустую.
1️⃣ Контроллеры
🔹 Обычный контроллер
php artisan make:controller UserControllerЧто делает: создаёт пустой контроллер
Когда использовать: нужен полный контроль над методами
🔹 Resource-контроллер (CRUD)
php artisan make:controller UserController --resourceСоздаёт методы:
index, create, store, show, edit, update, destroyИдеально для: MVC-приложений
Работает в паре с:
Route::resource('users', UserController::class);🔹 API Resource-контроллер
php artisan make:controller UserController --apiБез
create() и edit()Для: REST API (JSON, Sanctum, JWT)
🔹 Invokable-контроллер
php artisan make:controller LoginController --invokableОдин метод
__invoke()Для: одного действия, чистые роуты
2️⃣ Представления (Blade)
🔹 View
php artisan make:view aboutСоздаёт
resources/views/about.blade.php🔹 Blade-компонент
php artisan make:component AboutДля: переиспользуемых UI-элементов
Пример:
<x-about />3️⃣ Модели и база данных
🔹 Модель
php artisan make:model CourseЧасто используемые флаги:
-m — migration-f — factory-s — seeder-a — всё сразу🔹 Информация о модели (Laravel 10+)
php artisan model:show CourseПоказывает таблицу, поля, связи, casts
Очень полезно для отладки
4️⃣ Миграции
php artisan make:migration create_posts_tablephp artisan migratephp artisan migrate:rollback --step=3php artisan migrate:reset ⚠️ удаляет все таблицыphp artisan migrate:refreshЗапуск конкретной миграции:
php artisan migrate --path=/database/migrations/xxxx.php5️⃣ Seeders (данные)
php artisan make:seeder TeachersSeederphp artisan db:seed --class=TeachersSeederДля: тестовых и стартовых данных
6️⃣ Валидация и middleware
php artisan make:rule Uppercasephp artisan make:middleware CheckRoleИспользуется для:
валидации, авторизации, фильтрации запросов
7️⃣ Аутентификация и API
php artisan install:apiУстанавливает Laravel Sanctum и API-авторизацию
php artisan make:provider AuthServiceProviderGates и Policies
8️⃣ Почта
php artisan make:mail WelcomeMailEmails и уведомления
9️⃣ Настройка и обслуживание
php artisan key:generate обязательно после clonephp artisan storage:link доступ к storagephp artisan downphp artisan down --secret=tokenphp artisan up🔟 Роутинг и отладка
php artisan route:listphp artisan route:list --except-vendorДля: поиска конфликтов и middleware
1️⃣1️⃣ Локализация и stubs
php artisan lang:publishphp artisan stub:publishStubs — шаблоны для
make: командМожно кастомизировать стиль проекта
1️⃣2️⃣ Кэш и оптимизация
php artisan optimizephp artisan optimize:clearphp artisan config:cachephp artisan route:cachephp artisan view:clearДля продакшена и странных багов
1️⃣3️⃣ Очереди и задачи
php artisan make:job SendEmailJobphp artisan queue:work1️⃣4️⃣ Policies
php artisan make:policy CoursePolicy --model=Course⭐ 1️⃣5️⃣ Tinker (обязательно знать)
php artisan tinkerИнтерактивный REPL
Можно выполнять Laravel-код, запросы, сервисы прямо в консоли
Библиотека пхпшника
#php_азбука
👍4🥱3❤1
Совет по Laravel: Порционное удаление данных
💬Если удаляете много записей из таблицы, делайте это частями и с паузами, чтобы не завалить базу данных.
Библиотека пхпшника
#vardump
💬Если удаляете много записей из таблицы, делайте это частями и с паузами, чтобы не завалить базу данных.
Библиотека пхпшника
#vardump
👍7🤔1
Какое значение по умолчанию принимает директива memory_limit в PHP?
Правильный ответ лежит в канале задач
Правильный ответ лежит в канале задач
🌚1
Forwarded from Книги для программистов
Эта книга — как дружелюбное и наглядное введение в проектирование реляционной базы без боли, внутри которого тебя ждет:
🔹 SQL без лишней воды. Как создавать таблицы, писать запросы и не сломать всё одной командой.
🔹 Проектирование базы с нуля. Что хранить, где хранить, как правильно назвать таблицы и поля.
🔹 Нормализация без страшных терминов. Минимум дублей, минимум аномалий, максимум структуры.
🔹 Практика на реальном проекте. Будешь проектировать и оптимизировать базу под e-commerce — от схемы до запросов.
🔹 Генеративный ИИ в помощь. Как делегировать рутину: описания сущностей, черновики схем, проверки связей.
🔹 Производительность и безопасность. Почему индексы — не украшение схемы, а обязательная часть. И как не создать дыру в доступах одним неверным GRANT’ом.
Эта книга не грузит теорией ради теории. Она объясняет, как базы работают на практике, и помогает собрать ту самую «правильную» структуру, которая выдержит рост приложения.
🔹 Курс «Основы IT для непрограммистов»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Совет по Laravel 💡: Используйте события повторной привязки для обновления зависимостей
Когда привязанный экземпляр в контейнере Laravel привязывается заново, запускается событие повторной привязки. Вы можете прослушивать это событие, чтобы обеспечить актуальность классов, использующих этот экземпляр. Это можно сделать с помощью метода
Библиотека пхпшника
#vardump
Когда привязанный экземпляр в контейнере Laravel привязывается заново, запускается событие повторной привязки. Вы можете прослушивать это событие, чтобы обеспечить актуальность классов, использующих этот экземпляр. Это можно сделать с помощью метода
rebinding() или просто с помощью команды refresh 🚀Библиотека пхпшника
#vardump
👍1
Symfony 7.4 — наконец-то без костылей
Иногда релиз фреймворка — это «косметика перед следующей мажорной версией».
Symfony 7.4 — не из таких.
Этот релиз закрывает старые, раздражающие проблемы, с которыми все давно смирились. И
делает это аккуратно, системно и по-взрослому.
🎥 Видео — больше не боль
Если вы когда-либо валидировали видео, вы знаете этот путь:
В 7.4 появился
Теперь можно одной аннотацией проверить:
🔸формат и MIME
🔸вес файла
🔸разрешение и ориентацию
🔸соотношение сторон
🔸длительность
🔸контейнеры и кодеки
🔸битые файлы ещё до бизнес-логики
Никакой логики в контроллере.
Никаких «проверим потом».
Видео либо валидно — либо сразу нет.
🧩 Консоль, которую приятно писать
Symfony Console всегда был сильным, но шумным.
В 7.4 его реально упростили.
Enum прямо в аргументах
Не строка, не if-else — нормальный
DTO через
Аргументы команд наконец выглядят как структура, а не мешок параметров.
Интерактив описывается декларативно, без ручных вопросов в коде.
CLI теперь пишется так же аккуратно, как контроллеры.
🧹 Request без магии
Старый
Он угадывал, откуда брать данные. Иногда — не так, как вы ожидали.
В 7.4 его депрекейтнули. И это правильное решение.
Теперь вы всегда знаете:
1. откуда пришли данные
2. почему они именно такие
3. где искать баг
Плюс — на PHP 8.4 Symfony нормально парсит PUT/PATCH/DELETE с телом запроса. Без хака, без костылей, без сюрпризов.
📦
Раньше:
кеш
шареные данные
временные файлы
всё лежало рядом.
Теперь:
Если вы используете Docker или Kubernetes — вы сразу почувствуете разницу.
✨ Атрибуты вместо ритуалов
Symfony продолжает двигаться к коду без «обвязки»:
нативный HTML5-парсер из PHP 8.4
Быстрее. Точнее. Без libxml-наследия.
Ничего не нужно настраивать — просто становится лучше.
👉 Читать статью
Библиотека пхпшника
Иногда релиз фреймворка — это «косметика перед следующей мажорной версией».
Symfony 7.4 — не из таких.
Этот релиз закрывает старые, раздражающие проблемы, с которыми все давно смирились. И
делает это аккуратно, системно и по-взрослому.
🎥 Видео — больше не боль
Если вы когда-либо валидировали видео, вы знаете этот путь:
File → Image → кастомный валидатор → ffmpeg → боль.В 7.4 появился
#[Assert\Video] — и всё стало нормально.Теперь можно одной аннотацией проверить:
🔸формат и MIME
🔸вес файла
🔸разрешение и ориентацию
🔸соотношение сторон
🔸длительность
🔸контейнеры и кодеки
🔸битые файлы ещё до бизнес-логики
Никакой логики в контроллере.
Никаких «проверим потом».
Видео либо валидно — либо сразу нет.
🧩 Консоль, которую приятно писать
Symfony Console всегда был сильным, но шумным.
В 7.4 его реально упростили.
Enum прямо в аргументах
Не строка, не if-else — нормальный
BackedEnum.DTO через
#[MapInput]Аргументы команд наконец выглядят как структура, а не мешок параметров.
#[Ask] и #[Interact]Интерактив описывается декларативно, без ручных вопросов в коде.
CLI теперь пишется так же аккуратно, как контроллеры.
🧹 Request без магии
Старый
Request::get() был удобным… и опасным.Он угадывал, откуда брать данные. Иногда — не так, как вы ожидали.
В 7.4 его депрекейтнули. И это правильное решение.
Теперь вы всегда знаете:
1. откуда пришли данные
2. почему они именно такие
3. где искать баг
Плюс — на PHP 8.4 Symfony нормально парсит PUT/PATCH/DELETE с телом запроса. Без хака, без костылей, без сюрпризов.
📦
var/share — мелочь, которая сильно упрощает жизньРаньше:
кеш
шареные данные
временные файлы
всё лежало рядом.
Теперь:
var/cache — локально, быстро, одноразовоvar/share — переживает деплой, масштабирование, рестартыЕсли вы используете Docker или Kubernetes — вы сразу почувствуете разницу.
✨ Атрибуты вместо ритуалов
Symfony продолжает двигаться к коду без «обвязки»:
#[IsSignatureValid] — подписанные URL без сервисов#[CurrentUser] с union-типаминативный HTML5-парсер из PHP 8.4
Быстрее. Точнее. Без libxml-наследия.
Ничего не нужно настраивать — просто становится лучше.
👉 Читать статью
Библиотека пхпшника
🔥6❤2👏2
Forwarded from Библиотека задач по PHP | тесты, код, задания
От 45 мс до 8 мс: тестирование Symfony 7.4 на FrankenPHP
Больше десяти лет PHP-стек выглядел одинаково: Nginx → FastCGI → PHP-FPM. Надёжно, привычно — и технологически застыло.
FrankenPHP ломает эту модель полностью.
FrankenPHP — это application server, встроенный прямо в Caddy. Без FastCGI, без прокси-прослоек и с ключевой фичей — Worker Mode.
В чём суть
В классическом PHP-FPM каждый запрос:
загружает autoload
поднимает Kernel
и тут же всё уничтожает
Для тяжёлых приложений на Symfony 7.4 это 30–100 мс чистых потерь на каждый запрос.
Что меняет FrankenPHP
Worker Mode загружает приложение один раз и держит его в памяти.
Результат:
🚀 3–4× рост RPS
⚡ P95 latency ~8 мс
🌐 HTTP/3, Early Hints, auto-HTTPS из коробки
🔴 встроенный Mercure без отдельного сервиса
Архитектура будущего
Один контейнер вместо nginx + php-fpm:
1. Docker
2. FrankenPHP
3. Symfony 7.4 LTS
4. real-time события без Redis и WebSocket-зоопарка
Важный нюанс
Worker Mode = общая память между запросами.
Stateful-сервисы — под строгий контроль. Symfony 7.4 решает это через
Бенчмарк (AWS t3.medium)
Nginx + PHP-FPM: ~1 240 RPS / 45 мс
FrankenPHP Worker: ~3 850 RPS / 8 мс
PHP-FPM не «плохой» — он просто устарел.
Связка Symfony 7.4 + FrankenPHP — это новый дефолт для high-load и API-first проектов.
Если начинаете новый проект — выбирайте FrankenPHP сразу.
Если поддерживаете легаси — пора планировать миграцию.
👉 Читать статью
Библиотека пхпшника
Больше десяти лет PHP-стек выглядел одинаково: Nginx → FastCGI → PHP-FPM. Надёжно, привычно — и технологически застыло.
FrankenPHP ломает эту модель полностью.
FrankenPHP — это application server, встроенный прямо в Caddy. Без FastCGI, без прокси-прослоек и с ключевой фичей — Worker Mode.
В чём суть
В классическом PHP-FPM каждый запрос:
загружает autoload
поднимает Kernel
и тут же всё уничтожает
Для тяжёлых приложений на Symfony 7.4 это 30–100 мс чистых потерь на каждый запрос.
Что меняет FrankenPHP
Worker Mode загружает приложение один раз и держит его в памяти.
Результат:
🚀 3–4× рост RPS
⚡ P95 latency ~8 мс
🌐 HTTP/3, Early Hints, auto-HTTPS из коробки
🔴 встроенный Mercure без отдельного сервиса
Архитектура будущего
Один контейнер вместо nginx + php-fpm:
1. Docker
2. FrankenPHP
3. Symfony 7.4 LTS
4. real-time события без Redis и WebSocket-зоопарка
Важный нюанс
Worker Mode = общая память между запросами.
Stateful-сервисы — под строгий контроль. Symfony 7.4 решает это через
ResetInterface, но архитектурное мышление придётся обновить.Бенчмарк (AWS t3.medium)
Nginx + PHP-FPM: ~1 240 RPS / 45 мс
FrankenPHP Worker: ~3 850 RPS / 8 мс
PHP-FPM не «плохой» — он просто устарел.
Связка Symfony 7.4 + FrankenPHP — это новый дефолт для high-load и API-first проектов.
Если начинаете новый проект — выбирайте FrankenPHP сразу.
Если поддерживаете легаси — пора планировать миграцию.
👉 Читать статью
Библиотека пхпшника
👍6🥱3🌚1
Hi.Events
Опенсорс платформа для управления мероприятиями и продажи билетов
🔗 Github
Библиотека пхпшника
#инструменты
Опенсорс платформа для управления мероприятиями и продажи билетов
🔗 Github
Библиотека пхпшника
#инструменты
⚡️ How-to: serverless Symfony/PHP на AWS без Redis для сессий
У serverless есть ловушка: Lambda требует stateless, а PHP-сессии по умолчанию живут в файлах. В AWS Lambda это «песок»: инстанс исчез — сессия исчезла. Частый костыль — Redis/ElastiCache, но это уже VPC, обслуживание и лишние расходы. В статье предлагают более «чистый» вариант: хранить сессии и CSRF-токены в DynamoDB.
Идея простая: заменить файловый session handler на DynamoDB-backed, добавить TTL для авто-истечения и использовать Lambda Function URL (без API Gateway). В итоге приложение остаётся действительно serverless: масштабируется само, не требует инфраструктуры под Redis и платит «по факту». Отдельно разбираются single-table паттерны (сессии/CSRF/сущности в одной таблице), нюансы генерации URL в Symfony и честные компромиссы: cold start, стоимость на высоком стабильном трафике и гонки при параллельных вкладках.
🔗 Читать статью
Библиотека пхпшника
У serverless есть ловушка: Lambda требует stateless, а PHP-сессии по умолчанию живут в файлах. В AWS Lambda это «песок»: инстанс исчез — сессия исчезла. Частый костыль — Redis/ElastiCache, но это уже VPC, обслуживание и лишние расходы. В статье предлагают более «чистый» вариант: хранить сессии и CSRF-токены в DynamoDB.
Идея простая: заменить файловый session handler на DynamoDB-backed, добавить TTL для авто-истечения и использовать Lambda Function URL (без API Gateway). В итоге приложение остаётся действительно serverless: масштабируется само, не требует инфраструктуры под Redis и платит «по факту». Отдельно разбираются single-table паттерны (сессии/CSRF/сущности в одной таблице), нюансы генерации URL в Symfony и честные компромиссы: cold start, стоимость на высоком стабильном трафике и гонки при параллельных вкладках.
🔗 Читать статью
Библиотека пхпшника
😁3❤1🥱1🌚1