Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
10.9K subscribers
1.6K photos
27 videos
26 files
4.35K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🧠 DSL vs паттерны: что выбрать в проекте

В разработке часто встаёт вопрос: использовать ли DSL (Domain Specific Language) или опираться на дизайн-паттерны. Оба подхода помогают структурировать работу с данными и бизнес-логикой, но дают разный результат.

🔍 В чём разница

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

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

⚠️ Ограничения DSL

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

Когда что выбрать
Если предметная область хорошо понятна и устойчива — стоит строить DSL.
Если действия ещё уточняются, а изменения происходят часто — лучше опираться на паттерны.
В сложных проектах возможен гибрид: паттерны для структуры и расширяемости, DSL для выражения бизнес-логики.

💬 А как у вас в проектах? Чаще используете паттерны или внедряете DSL?

👉 Читать статью

Библиотека пхпшника

#элементарный_выбор
🛠️regexpbuilderphp — регулярные выражения, понятные человеку

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

🔗Github

#инструменты
🔥141
How to: масштабировать до миллиарда документов в Symfony

Цены на бензин меняются по несколько раз в день. В итоге получается адский датасет: десятки гигабайт CSV и сотни тысяч записей цен за сутки. Если грузить это «как в SQL» (по документу на каждую цену), MongoDB быстро превращается в кладбище индексов и медленных агрегаций.

Как делают по-взрослому: сначала разбираем структуру данных (станции отдельно, цены отдельно), потом проектируем схему под запросы. Главный трюк — bucket pattern: складывать цены не по одной записи, а «ведрами» по станция + тип топлива + день, внутри хранить массив цен за день. Так документов становится в разы меньше, а дневные графики и «последнюю цену» можно доставать быстро.

Дальше — импорт не через «всё в память», а по дням: читаем CSV → временная коллекция → агрегация в bucket-документы → добавляем экстремумы (min/max) и предагрегаты (средние) → подтягиваем данные станции и денормализуем только то, что реально нужно.

👉 Читать статью
🌚1
🧠 Rate Limiting — защита от перегрузки и злоупотреблений

🔹 Rate Limiting — это ограничение количества запросов, которое клиент может сделать за определённый период. Он предотвращает DoS-атаки, brute-force, резкий рост нагрузки и аварийные ситуации.

📌 В Laravel
Laravel имеет встроенную поддержку через middleware throttle, а также гибкий API для кастомных правил:
✔️ ограничение на количество запросов за минуту/час;
✔️ разные лимиты для разных пользователей (по ID, API-ключу или IP);
✔️ кастомные сообщения об ошибке.
Пример стандартного ограничения:


Route::middleware(['throttle:60,1'])->group(function () {
Route::get('/posts', [PostController::class, 'index']);
});

🧾 Это ограничит пользова­теля до 60 запросов в минуту.
Для более гибкого контроля можно определить лимитер в App\Providers\RouteServiceProvider:



RateLimiter::for('api', function ($request) {
return Limit::perMinute(100)->by($request->user()?->id ?: $request->ip());
});
```

🧾 Такой подход позволяет задавать разные лимиты для аутентифицированных и анонимных пользователей.

📌 В Symfony
Symfony тоже имеет встроенный Rate Limiter с разными алгоритмами (фиксированное окно, sliding window, token bucket). Он может быть применён к маршрутам через сервисы и конфигурацию.

⚠️ Но для защиты от реальных DoS-атак лучше комбинировать приложение с ограничением на уровне веб-сервера или прокси (NGINX, Cloudflare), поскольку встроенный rate limiter требует загрузки Symfony для каждого запроса.

Библиотека пхпшника
🥱4
Service Tags в Symfony: не про ивенты, а про архитектуру

Service tags в Symfony часто воспринимают как утилиту для Event Listener’ов и Twig-расширений. Это правда — но лишь малая часть картины. На практике tags — один из самых мощных архитектурных инструментов Symfony, если использовать их осознанно.

Статья как раз про это: не «как повесить тег», а как построить расширяемую систему без правок YAML и без условной логики — строго по Open-Closed Principle.

Ключевая идея
Мы собираем модульный Document Processing Pipeline:
PDF, CSV, JSON и любые новые форматы
добавление нового процессора = новый класс, без конфигов
Symfony 7.4, PHP 8.3+, атрибуты вместо YAML

Что здесь действительно важно
1. AutoconfigureTag на интерфейсе
Любая реализация автоматически попадает в систему. Никаких services.yaml.
2. TaggedIterator = современный Strategy
Типизированная коллекция сервисов, с ключами и приоритетами, без Compiler Pass’ов «по старинке».
3. defaultIndexMethod вместо магии
Ключ коллекции определяет сам сервис. Контейнер не знает доменной логики — и это правильно.
4. Кастомные атрибуты поверх тегов
Доменные метаданные (type, priority) живут в атрибуте, а не в конфиге. Код становится декларативным и читаемым.
5. TaggedLocator для ленивой загрузки
Ни один процессор не создаётся, пока он реально не нужен. Это критично для больших систем.
6. Compiler Pass как архитектурный guardrail
Контейнер валидирует систему на этапе сборки:
— дубли типов
— архитектурные инварианты
— ошибки ловятся до runtime
7. Абсолютный уровень декомпозиции
Даже чистые PHP-атрибуты без зависимости от Symfony можно «подключить» через registerAttributeForAutoconfiguration.
Домен остаётся чистым. Инфраструктура — умной.

Почему это ценно
✔️ расширение без модификации
✔️ ноль условной логики
✔️ высокая тестируемость
✔️ архитектурные ошибки ловятся на этапе сборки контейнера

👉 Читать статью

Библиотека пхпшника
1👍1
В Laravel с версии 10.7 появилась поддержка конвейера для процессов, который легко позволяет связывать вывод одного процесса с входными данными для другого.

Библиотека пхпшника

#vardump
11
📚 Algorithmic Thinking: Learn Algorithms to Level Up Your Coding Skills, 2nd Edition (2024)

Если ты знаешь синтаксис, но на словах «графы» и «динамика» начинаешь гуглить — это норм. Эта книга как раз про переход от «я пишу код» к «я понимаю, что делаю».

Второе издание учит алгоритмическому мышлению через задачи из спортивного программирования. Без высшей математики и абстрактной теории. Задача → варианты решений → выбор лучшего.

Что прокачиваешь:

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

Почему это полезно:

✔️ задачи взяты из реальных соревнований, а не «учебных примеров»;
✔️ мышление — универсальное, язык вторичен;
✔️ готовит к собеседованиям без заучивания шаблонов.

Кому подойдёт:

✔️ студентам и самоучкам;
✔️ тем, кто «падает» на алгоритмах на интервью;
✔️ разработчикам, которые хотят писать код быстрее и умнее, а не длиннее.

Скачать

🐸 Книги для программистов | Поддержать бустом
Please open Telegram to view this post
VIEW IN TELEGRAM
4
💻 Подборка новостей по PHP за неделю:​

🔹 Laravel 12.49.0 — в коллекциях появился метод hasSole() для проверки наличия ровно одного подходящего элемента. Также добавлена поддержка between с подзапросами, сохранение ключей в fluent resource collections и работа с датой/временем в команде maintenance mode.

🔹 NativePHP for Mobile — бесплатно — объявлен релиз NativePHP Air, а мобильная версия NativePHP стала полностью бесплатной, вместе с рядом улучшений экосистемы и платформы.

🔹 Laravel VS Code Extension 1.5.0 — улучшена поддержка Livewire 4 и Blade: более точный парсинг, автодополнение и IntelliSense для современных Laravel-проектов.

🔹 Statamic 6 — состоялся официальный релиз новой версии CMS: обновлённая админ-панель и современный фронтенд-стек.

🔹 Symfony 26 января — 1 февраля — активное развитие Symfony 8.1, а также выпущены версии 5.4.51, 6.4.33, 7.3.11, 7.4.5 и 8.0.5 для устранения потенциальной уязвимости и усиления безопасности.

Библиотека пхпшника

#свежак
🗂️ Сохранение нескольких моделей

Знаете ли вы, что Laravel позволяет сохранять сразу несколько связанных моделей с помощью метода saveMany 🚀

Библиотека пхпшника

#vardump
2
Почему вы должны указывать тип данных в массивах в PHP

Статья обсуждает важность и преимущества использования типов массивов в PHP для повышения ясности кода, улучшения автодополнения в IDE и улучшения статического анализа.

👉 Читать

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

🐘 ЗАДАЧИ:

➡️ Вести три канала о PHP: основной, задачи и собеседования.
➡️ Создавать контент Middle+: архитектура, оптимизация, разбор RFC, кейсы Laravel/Symfony.
➡️ Готовить задачи и вопросы для интервью с качественным разбором решений.
➡️ Работать с аналитикой: отслеживать метрики (охваты, ERR) и корректировать контент-план.
➡️ Мониторить комьюнити и оперативно упаковывать тренды в посты.

🎯 ТРЕБОВАНИЯ:

➡️ PHP Middle+: понимание работы движка, паттернов и экосистемы.
➡️ Стиль: умение писать для профи — ёмко, аргументированно и без воды.
➡️ Инструменты: уверенное владение нейросетями для ускорения работы.
➡️ Самостоятельность: вы сами находите темы и отвечаете за качество.

УСЛОВИЯ:

📍 Удалёнка, гибкий график, частичная занятость.
📍 Сдельная оплата за количество задач.
📍 Аудитория — тысячи профильных разработчиков.

👉 Оставляйте отклик, и мы свяжемся с вами!
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🔒 Symfony: Lock vs Semaphore — когда и что выбрать?

В разработке многозадачных PHP-приложений часто возникает необходимость контролировать доступ к общим ресурсам. Symfony предоставляет два мощных инструмента для этой цели: Lock и Semaphore. Хотя оба компонента служат для синхронизации процессов, их подходы и области применения существенно различаются.

🔐 Lock — эксклюзивный доступ
Lock обеспечивает исключительный доступ к ресурсу:
🔸Один процесс — один доступ: только один процесс может получить «ключ» к ресурсу в любой момент времени.
🔸Идеально для критических секций: обновление файлов, обработка платежей, изменение данных в базе данных.
🔸Простая модель: либо у вас есть доступ, либо вы ждёте.

🚦 Semaphore — ограниченный параллелизм
Semaphore позволяет контролировать количество одновременно работающих процессов:
🔸Ограниченное количество разрешений: каждый процесс «потребляет» одно разрешение.
🔸Идеально для ограничения параллелизма: обработка изображений, API-запросы, очереди задач.
🔸Модель «ограниченного доступа»: несколько процессов могут работать одновременно, но не более заданного лимита.

🧠 Когда использовать что?

Lock: используйте, когда необходимо обеспечить, чтобы только один процесс выполнял задачу в определённый момент времени.

Semaphore: используйте, когда нужно ограничить количество одновременно выполняющихся процессов, например, для предотвращения перегрузки системы.

📚 Документация:


Symfony Lock

Symfony Semaphore


🐸Библиотека пхпшника

#элементарный_выбор
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Instructor

Библиотека для структурированной экстракции данных на PHP, основанная на LLM. Создан для простоты, прозрачности и контроля.

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

🔗 Github

#инструменты
😁1