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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
💡 Symfony Validator: не только для форм

Большинство PHP-разработчиков используют Validator в Symfony исключительно для проверки сущностей, связанных с формами. Но этот компонент — гораздо мощнее, чем просто NotBlank и Email.

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

🧩 1. DTO вместо Entity
Антипаттерн — принимать в контроллере Entity.
Лучше использовать DTO:
🔒 безопасно (нет mass assignment),
🧠 понятно (чёткий контракт API),
🧱 независимо (никакой связи с ORM).



#[Assert\NotBlank]
#[Assert\Email]
public readonly ?string $email;


⚙️ 2. Динамическая валидация с Group Sequences
Хочешь, чтобы обязательные поля менялись в зависимости от условий?
Используй GroupSequenceProvider:
например, если тип аккаунта corporate — проверяй companyName, если individual — игнорируй.

🧬 3. Проверка вложенных структур
С #[Valid] можно валидировать коллекции DTO:


#[Assert\Valid]
public array $items = [];


А с #[Collection] — ассоциативные массивы и JSON-payload’ы.

🧠 4. Свои Constraints с DI
Нужна валидация с доступом к базе или API?
Создай свой ConstraintValidator, инжектни EntityManager или сервис и пиши логику вроде:


if ($repository->findOneBy([$field => $value])) {
$this->context->buildViolation('Already in use')->addViolation();
}


Validator в Symfony — это не просто про формы.
Это способ держать бизнес-инварианты в чистом, расширяемом и декларативном виде.

🧠 Применяйте его для DTO, API, микросервисов и любых сложных структур.
Код станет чище, а валидация — надёжнее.

👉 Читать полностью

Библиотека пхпшника
🔥12
✏️ LeetCode-интервью: почему опытные разработчики их проваливают

Инженер с 10+ годами опыта провалил интервью, потому что не смог за 45 минут решить задачу на динамическое программирование, которую не видел с универа.

Есть аргументы за решение задач не собеседовании и против.

Никто не будет решать задачки с литкода на работе, но и код с O(n²) вместо O(n log n) сто процентов положит прод под нагрузкой.

Админ один раз перенервничал и забыл как найти середину отрезка на плоскости. Это полностью заруинило ему алгоритмическую секцию.

💬 Как вы думаете — задачи на собесе это ту мач или имеют место быть? Ждём ваше мнение в комментариях 👇

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
Очереди задач: простой способ пакетной обработки

Как работает очередь задач на примере создания миниатюр для видео.

Цель: после загрузки видео оно должно высветиться в виде миниатюры
👍1
🎁 И мозг прокачать, и макбук утащить!

Proglib.academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻

Условия:

1️⃣ Покупаешь любой курс Proglib до 15 ноября.
2️⃣ Проходишь минимум 2 учебные недели (можно осилить за два вечера).
3️⃣ Пишешь куратору в чат своего курса: #розыгрыш.

Что за курсы?

Математика для Data Science (6 месяцев боли и просветления).
Основы Python, ML, алгоритмы, AI-агенты и даже курс для тех, кто в IT, но не кодит.

👉 Участвовать в розыгрыше
📚 Learning SQL: Master SQL Fundamentals, 3rd Edition (2020)

Эта книга — идеальный способ перестать бояться сложных конструкций SQL и наконец понять, что делает твой запрос. Каждая глава — мини-квест с теорией, примерами и упражнениями, которые реально работают.

💡 Что внутри:

Основы SQL и продвинутые фичи — от JOIN до аналитических функций
Создание таблиц, индексов и ограничений
Работа с подзапросами, условной логикой и большими базами данных
Отчёты, аналитика и Big Data (теперь не только для дата-инженеров)
Встроенные функции для конвертации и манипуляций (легальный способ издеваться над данными)
Условная логика в SQL (if-else, но с извращениями)

🔗 Скачать
🤞 Поддержать канал бустом

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
💬 Ежемесячная ветка PHP-разработчиков

Друзья, открываем новую ветку для обмена проектами, идеями и кодом.
Если вы пилите свой pet-project, боретесь с архитектурой, настраиваете CI или просто хотите услышать мнение других — делитесь здесь 👇

Что можно постить:
🧩 куски кода и архитектурные решения
🧠 вопросы по оптимизации, безопасности, тестам
🛠️ свои открытые проекты или библиотеки

💬 размышления о фреймворках, паттернах и подходах
Пусть эта ветка станет местом, где PHP-сообщество помогает друг другу расти — без токсичности, с уважением к чужому опыту и с любовью к чистому коду ❤️

👇 Делитесь своими проектами в комментариях!
👍6
⌨️ Топ-вакансий по PHP за неделю

Backend разработчик (Middle/Senior) — от 180 000 до 290 000 ₽, Удалёнка (Москва)

PHP разработчик — 150 000 — 300 000₽, Офис (Казань)

PHP-разработчик — от 270 000 ₽, Офис (Новосибирск)

Senior PHP Developer (Symfony) — Удалёнка (Санкт-Петербург)

➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
🌚1
💻 ВАЖНО: макбук ещё не забрали!

Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).

Что нужно для участия?

— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (можно за два дня).
— Пишешь куратору #розыгрыш. Всё — ты в игре!

Что за курсы?

▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.

▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.

▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.

👉 Влетай, не думай!
🌚2
💡 Совет по Laravel: Получение исходных атрибутов

Аксессоры Laravel позволяют преобразовывать атрибуты модели при их извлечении. Но иногда может потребоваться получить исходное значение. Laravel предоставляет специальный метод для этого: getRawOriginal 🚀
❤‍🔥3
«Как я добавил систему рекомендаций контента в легаси-проект на PHP 7.2»

Проект на легаси PHP, обновить времени нет, а бизнес требует «сделайте поиск как у ChatGPT». Знакомо?

Так вот — автор статьи столкнулся именно с этим. Нужно было внедрить векторный поиск и рекомендательную систему, но проект жил на старом PHP 7.2, где современных клиентов под Qdrant просто нет.

💡 Решение? Написать свой клиент под старую версию.
И теперь даже на PHP 7.2 можно:
— реализовать умный поиск по смыслу, а не по словам;
— строить рекомендации для товаров и статей;
— искать дубликаты и похожий контент;
— автоматически категоризировать тексты;
— сделать полноценный RAG-модуль поддержки.

📚 В основе — простая идея:
текст → вектор → поиск ближайших векторов в Qdrant.
Никакой магии, просто математика.
👉 Автор выложил готовую библиотеку и минимальный пример работы — прямо в статье.

🤖 А вы когда-нибудь внедряли AI-фичи в легаси-проекты? Расскажите в комментариях
👍5👏1😁1
💻 Хочешь MacBook Pro? Просто начни учиться!

Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!

Всё просто:

— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.

📚 Выбирай свой курс:

▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.

👉 Участвовать в розыгрыше
🌚1
🧩 Расширенные паттерны для Symfony HttpClient: потоковая передача, ретраи и отказоустойчивость

Если вы хоть раз писали $client->request('GET', ...) и $response->toArray(), значит, уже пользовались symfony/http-client.
Для простых случаев этого хватает.

Но реальность другая:
– 100 API-эндпоинтов нужно получить за секунды, а не минуты
– JSON на 500 МБ не должен взорвать память
– API периодически “флапает”, а приложение должно выжить
– токен OAuth2 живёт 60 минут — и должен обновляться сам

💡 И тут выясняется, что HttpClient — не просто обёртка над curl, а мощный инструмент для сложных систем.

⚡️ 1. Конкурентные запросы через stream()


Обычный foreach делает запросы последовательно:
10 запросов × 300 мс = 3 сек.

С stream() всё иначе — запросы идут параллельно, и общее время ≈ самому медленному из них.
foreach ($productIds as $id) {
$responses[$id] = $client->request('GET', "products/$id");
}
foreach ($client->stream($responses) as $r => $chunk) {
if ($chunk->isLast()) $prices[] = $r->toArray()['price'];
}


👉 10 запросов за ~300 мс вместо 3 секунд.

🧠 2. Потоковый парсинг JSON (новинка Symfony 7.3)

symfony/json-streamer позволяет читать огромные JSON-файлы без загрузки их целиком в память.

composer require symfony/json-streamer


foreach ($streamReader->read($response, Type::list(Type::object(ProductDto::class))) as $product) {
// обработка 2 млн объектов без OutOfMemory
}


🧱 3. Надёжность: Retry + Circuit Breaker

RetryableHttpClient сам повторит запросы при 503/504.
А если API “упало” — кастомный CircuitBreakerClient отключает обращения на 60 секунд, чтобы не “молотить мёртвый сервис”.

🔐 4. Автоматический OAuth2

AccessTokenHttpClient берёт токен из кэша и обновляет его по необходимости.
Больше никаких ручных проверок if ($token->isExpired()).

🧪 5. Тестирование без сети

MockHttpClient с генератором позволяет точно проверить последовательность и данные запросов.
Тесты становятся детерминированными и быстрыми.

🔗 Ссылка на статью

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
symfony/polyfill-intl-idn

Что это
Это полифил от Symfony Polyfill, который добавляет поддержку функций idn_to_ascii и idn_to_utf8 для версий PHP, где расширение ext‑intl может быть не установлено или не включено.
На Packagist: пакет устанавливается как symfony/polyfill-intl-idn. packagist.org

Зачем нужен
🔸 Если ваша система работает без расширения ext-intl (или с урезанной его поддержкой), библиотека гарантирует, что вы всё равно сможете использовать функции преобразования международных доменов (IDN).
🔸 Обеспечивает кросс-версийную совместимость — особенно полезно, если код должен работать в разных окружениях, где могут быть разные версии PHP и разные расширения.

Основная функциональность
Обеспечивает функцию idn_to_ascii() — перевод домена в ASCII-представление (например, для международных доменов с нелатинскими символами).
Обеспечивает функцию idn_to_utf8() — обратный перевод из ASCII формы в UTF-8.

Установка
Можно просто добавить в проект через Composer:

composer require symfony/polyfill-intl-idn

Когда особенно полезна
🔹 В проектах, которые должны поддерживать работу на серверах с минимальными расширениями PHP.
🔹Когда нужно надёжно работать с доменами, содержащими не-ASCII символы (например, русские домены, домены на арабском, китайском и др.).
🔹 В библиотеках или пакетах, которые распространяются и должны работать на максимально широком диапазоне окружений.

👉 Github

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

#инструменты
👍1
🛒 Black Friday от Proglib.academy!

Только до 30 ноября — скидка 40% на ВСЕ курсы.

Пора добавить в корзину не носки, а новые скиллы: Python, математика для Data Science, AI, алгоритмы и структуры данных, ML.

🎓 Выбирай курс, который реально двинет тебя в карьере, и учись со скидкой.

👉 Учиться со скидкой
🎲 How to: Генерировать случайные Enum-значения с Faker в PHP 8.1+

PHP 8.1 принес нативные Enum, а Faker — идеальный инструмент для генерации тестовых данных. Вместе они позволяют быстро и безопасно создавать реалистичные значения для сидов и фабрик.

В статье показано, как:
— определить Enum,
— установить и настроить Faker,
— сгенерировать случайные Enum-значения,
— использовать всё это в Laravel Factory.

Типобезопасно, просто и без хардкода. 🚀

🔗 Ссылка на статью

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