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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
⚡️ Продолжаем знакомить вас с экспертами курса AgentOps!

Сергей Нотевский расскажет, как выстроить FinOps для AI-продуктов: оптимизировать затраты на разработку и продакшен, внедрить model routing, semantic cache и систему алертов для контроля расходов
Эмиль Сатаев разберет Context Engineering: управление контекстом, защиту от prompt injection, работу с длинными контекстами и построение безопасного пайплайна входа для AI-систем
Михаил Бондаревский покажет, как подготовить инфраструктуру для AI-агентов: Docker, sandboxing, streaming, docker-compose и воспроизводимое окружение для разработки и продакшена
Мурат Хажгериев расскажет про Enterprise Integrations & MCP: когда MCP действительно нужен, как подключать внешние сервисы и реализовывать интеграции с OAuth2 delegation
Герман Сабиров разберет Governance & Compliance для AI-систем: data flow, audit logs, требования 152-ФЗ, локализацию данных и построение compliance-подхода на уровне архитектуры

Курс для backend-разработчиков, тимлидов и LLM инженеров о том, как внедрять AI-логику в бэкенд IT-продуктов и сохранять стабильность сервиса.

👉 Изучить обновленную программу AgentOps и занять место.
1
🧠 Распознавание лиц на чистом PHP

Если задача пилить аттенданс или авторизацию по лицу прямо внутри Laravel-монолита, тащить Python-микросервис избыточно. Расширение php-dlib подгружает модели Dlib и отдаёт 128-мерные эмбеддинги без посредников.

Пайплайн на четыре шага

— ставим расширение из релизов mailmug/php-dlib и прописываем путь в php.ini;
— качаем три .dat-модели (детектор CNN, 5-point landmarks, ResNet recognition);
— на этапе enroll прогоняем фото через детектор → ландмарки → дескриптор, сериализуем в faces.db;
— на recognize считаем евклидово расстояние, порог 0.6 отсекает чужих.

Ядро энролла:
$faces = $fd->detect($img);
$landmarks = $fld->detect($img, $faces[0]);
$descriptor = $fr->computeDescriptor($img, $landmarks);
$database[$name] = $descriptor;


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

📂 Скачать исходники

Библиотека пхпшника
🔥7👍21🌚1
🔍 Laravel Request Lifecycle: что происходит до того, как сработает твой контроллер

Контроллер — это не начало запроса, а середина. К моменту, когда выполняется его тело, фреймворк уже прошёл половину пути. Этот путь объясняет, почему register() ≠ boot(), почему route binding — не магия контроллера, и почему синглтоны убивают вас в Octane.

1️⃣ Точка входа

Веб-сервер ничего не знает про роуты и Eloquent. Его задача — отдать запрос в public/index.php. Дальше:
— грузится автолоадер Composer;
— из bootstrap/app.php достаётся инстанс приложения (он же — service container);
— Request::capture() оборачивает $_GET/$_POST/$_SERVER в Illuminate\Http\Request (наследник Symfony Request);
— $app->handleRequest(...) резолвит HTTP Kernel, гоняет запрос, шлёт ответ и терминирует.

2️⃣ HTTP Kernel — координатор, а не бизнес-логика

Включает method override (_method для PUT/PATCH/DELETE), отправляет запрос в роутер, ловит исключения и превращает их в HTTP-ответ через хендлер, диспатчит RequestHandled.

3️⃣ Бутстрап (по порядку)

env → config → exceptions → facades → register providers → boot providers.

Порядок критичен:
→ register() — только биндинги в контейнер, ничего не резолвить
→ boot() — настройка уже зарегистрированных сервисов (гейты, события, view composers)

Правило: биндишь в register, настраиваешь в boot. Иначе словишь зависимость от ещё не зарегистрированного сервиса.

4️⃣ Middleware

Запрос идёт внутрь, ответ — наружу через тот же стек.
— код до $next($request) → на входе
— код после → на выходе (можно менять готовый ответ)

Сначала глобальный стек (CORS, TrustProxies, trim, maintenance), потом роутер. Кто первым увидел запрос, последним увидит ответ.

5️⃣ Роутинг

Роутер матчит route (метод, домен, URI, констрейнты), привязывает route resolver к запросу (поэтому потом работает $request->route()), диспатчит Routing и RouteMatched.

6️⃣ Route middleware + биндинг

Отдельный pipeline под middleware роута (web, api, auth...). Здесь же SubstituteBindings подменяет {post:slug} на модель Post до вызова контроллера. Route model binding живёт в pipeline, а не внутри экшена.

7️⃣ Экшен

Контроллер резолвится из контейнера через make(), а не new — отсюда DI в конструкторе. FormRequest резолвится, авторизуется и валидируется до входа в метод. К началу тела экшена за тебя уже сделана куча работы.

8️⃣ Ответ

Что бы ты ни вернул — строку, массив, модель, Responsable, view — Laravel нормализует в Symfony Response (массив → JSON и т.д.). Дальше ответ идёт назад: route → global middleware. Контроллер вернул одно, а браузер получил другое? Смотри middleware после $next.

9️⃣ send() и terminate()

$response->send() и клиент получил ответ. Но lifecycle не закончен: terminate() запускает terminable middleware и termination callbacks *после* отправки. Удобно для метрик и лёгкого клинапа.

Нюанс: на terminate() middleware резолвится из контейнера заново. Нужен тот же инстанс, что в handle(), так что регай синглтоном. А тяжёлую работу в очередь, не в post-response.

🔟 Octane / queue workers

Классический PHP — свежий процесс на каждый запрос. Длинноживущие воркеры держат приложение в памяти между запросами. Синглтон с request-данными → утечка состояния в соседний запрос. Для request/job-scoped сервисов — scoped(): резолвится раз за lifecycle и сбрасывается на новом.

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93🔥3
🤖 AI в разработке: время новых процессов

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

Эксперты Podlodka AI Crew собрали сезон «AI-First Development», чтобы обсудить уже не отдельные инструменты, а новую инженерную модель, в которой AI становится частью команды.

С 15 по 19 июня участники конференции:

📄 Разберутся, как делать AI-разработку более предсказуемой с помощью Open Spec Development

⚡️ Изучат model routing и prompt caching


🏗 Узнают, как автоматизировать инженерные процессы с помощью AI

🤖 Обсудят навыки и оркестрацию AI-агентов

📊 Посмотрят, как AI влияет на качество и скорость разработки.


Формат конференции — необычный и удобный: пять дней живых Zoom-сессий по утрам и вечерам, закрытое комьюнити в Telegram и обсуждения со спикерами.

Если хотите разобраться, как реально встроить AI в процессы разработки и использовать его не только для генерации кода — присоединяйтесь, тем более, что сейчас действует приятная early-bird цена на участие.

🎟 Посмотреть программу и купить билеты:
https://podlodka.io/aicrew

По нашему промокоду phpproglib получите скидку🎁
1
😎 Знакомьтесь с экспертом Proglib.academy: Senior Software Engineer и Team Lead в Yandex Cloud Роман Барлос

Роман — консультант нашего курса «Разработка ИИ-агентов». Он работает на стыке cloud-native архитектуры и AI, активно внедряя современные ИИ-подходы в реальные процессы разработки.

За что его ценит IT-комьюнити?


🟣 Team Lead и AI-евангелист в команде UX Yandex Cloud
14-лет в разработке. Занимается AI-адопшеном в команде Yandex Cloud, проводит мастер-классы и продвигает лучшие практики для повышения эффективности разработчиков.


🟣 Техлид Sourcecraft Code Assistant
С сильным практическим бэкграундом принимал участие как технический лид в создании мощного AI-расширения для VS Code.


🟣 Создатель полезного Open Source
Разрабатывает утилиты, которые позволяют быстро начать эксперименты с инференсом и агентами в локальном окружении: например, набор скриптов vllm-setup для быстрого запуска окружения и mini-proxy — минималистичный прокси для OpenAI API провайдеров.


🟣 Автор интерактивных ML-визуализаций
Объясняет сложные концепции наглядно. Создал серию залипательных обучающих материалов, где можно вживую пощупать работу сетей Хопфилда, машин Больцмана и VC-размерности.


Роман регулярно делится инженерными наработками, инсайтами и экспертизой в своем авторском Telegram-канале

На курсе Роман выступает консультантом программы: он помогает формировать содержание уроков с опорой на актуальные инженерные практики и жесткие требования индустрии.

Узнать больше о программе и разработке автономных систем:
👉 Курс «Разработка ИИ-агентов»

Так, продолжаем знакомить вас с командой?
👍 — Да, ждем новых лиц
🔥 — Жду полезные материалы от Романа
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚21🥱1
✔️ PHP-тест: список, который иногда становится объектом

Мобилка падает на парсинге ответа. Только у части пользователей. У остальных — всё ок.

📦 Задание

Эндпоинт /api/products/available отдаёт товары в наличии. Бэкенд не трогали месяц. Внезапно прилетает баг от мобильной команды: «приложение крашится при разборе items, иногда это массив, иногда какой-то объект с числовыми ключами». На стейджинге не воспроизводится — там тестовые данные, все товары в наличии.

// src/Api/ProductController.php
class ProductController
{
public function __construct(
private readonly ProductRepository $repository,
) {}

public function available(): JsonResponse
{
$products = $this->repository->findAll();

$available = array_filter(
$products,
fn (Product $p): bool => $p->getStock() > 0,
);

return new JsonResponse([
'items' => $available,
'count' => count($available),
]);
}
}


🔹 Задачи

— Объяснить, почему форма ответа items зависит от данных: то массив, то объект
— Объяснить, при каком наборе товаров json_encode отдаёт {"0":…, "2":…} вместо […]
— Исправить так, чтобы items гарантированно сериализовался как JSON-массив

Ставьте → 🔥 если нравится формат. Если нет → 🌚

💬 Решения пишите в комменты под спойлер — сравним подходы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱7🔥51👍1👾1
🧩 Один разработчик, 10 лет, ввой PHP-фреймворк

На Хабре вышла статья про LOTIS (Low Time Script) — фреймворк, который автор в одиночку допиливал десять лет под бизнес-приложения (учёт товаров, документы, расчёт зарплат, прибыли).

Идея у него радикальная: никаких шаблонов и разметки. Всё веб-приложение собирается из PHP-объектов, а клиентский и серверный код живут рядом, как в десктопе.

В основе принцип, который автор назвал CMA: Construct → Metadata → Assembly:
→ объекты реализуют общий интерфейс Construct;
→ они генерируют метаданные;
→ а класс Space уже собирает из них DOM, реактивность или API.

То есть ты описываешь не <div>, а объект предметной области. И пока не отдашь его «во вселенную» (LTS::Space()->build(...)) — это просто объект, которому можно менять вложенность простым перераспределением наследования.

Не инструмент «нести в прод завтра», но честная, выстраданная попытка переосмыслить разработку веб-приложений на PHP. Как минимум — хороший повод подумать о метаданных и декларативном UI. Сейчас автор портирует архитектуру на Node.js (PWA, локальные БД, оффлайн).

Любопытно, спорно, авторски. Разбор и куски боевого кода в оригинале

💬 Что думаете?

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3🤔3👏1😁1
🔥 Инженерная методичка по ИИ от Романа Барлоса (Team Lead в Yandex Cloud)

Продолжаем делиться экспертизой команды курса «Разработка ИИ-агентов».

Роман собрал мастхев-инструменты и ключевые работы для тех, кто хочет выйти за рамки вайбкодинга.

🛠️ Полезные инструменты:
Understand Anything — граф знаний по коду и зависимостям.
DeepTutor — open-source платформа для персонализированного обучения.
Superpowers — набор практик для системной разработки с ИИ.
Awesome Agent Skills — коллекция навыков для ИИ-агентов.


📚 Ключевые работы по LLM:
Attention Is All You Need (2017) — архитектура Transformer.
GPT-1 (2018) — начало эпохи GPT.
GPT-2 (2019) — решение новых задач без дообучения.
GPT-3 (2020) — обучение на примерах из запроса.
InstructGPT (2022) — RLHF и современные чат-боты.


На курсе Роман выступает консультантом программы: помогает формировать содержание уроков с опорой на актуальные инженерные практики».

Занять свое место на потоке:

👉 Курс «Разработка ИИ-агентов»
🥱2
⚡️ Работаем с curl

Нужно скачать файл и продолжить загрузку после обрыва? curl -C - автоматически продолжит с того места, где остановился — не нужно качать заново.

🔹 Зачем это нужно

— Загрузка больших файлов через нестабильное соединение.
— Автоматически определяет размер уже скачанной части и продолжает.
— Работает с HTTP, FTP и даже SFTP.

🔹 Как использовать

— Скачать с возможностью продолжения: curl -C - -O https://example.com/dump.sql.gz
— С прогресс-баром: curl -C - -# -O https://example.com/large-file.tar.gz
— Ограничить скорость: curl --limit-rate 10M -O https://example.com/file.iso
— В конкретный файл: curl -C - -o backup.tar.gz https://example.com/backup
— С авторизацией: curl -C - -u user:pass -O https://repo.example.com/artifact.jar

💡 Заверни в цикл для автоматического ретрая: while ! curl -C - -O https://example.com/dump.sql.gz; do sleep 5; done — скрипт будет пытаться докачать, пока не получится.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🔥1
🔍 Repr: var_dump для людей

Когда в логи надо вывалить значение неизвестного типа, начинается зоопарк: var_export ломается на ресурсах, print_r плюётся простынями, json_encode давится бинарными строками. Библиотека icecave/repr делает то, что в Python называется reprlib — короткое и понятное представление чего угодно.

use Icecave\Repr\Repr;

echo Repr::repr([1, 2, 3]);
// [1, 2, 3]

echo Repr::repr($pdo);
// <PDO #0000000012ab>

echo Repr::repr(fopen('php://memory', 'r+'));
// <resource stream #5 r+>


Массивы режутся до 3 элементов и 3 уровней вложенности с подсчётом остатка, строки — до 50 символов с экранированием контрол-кодов, а объекты показывают класс и SPL-хеш (если есть __toString или RepresentableInterface — используется он).

⚙️ Установка: composer require icecave/repr. Инструмент идеально подходит для кастомных эксепшенов и структурного логирования, где var_export выдает нечитаемый ад.

Библиотека пхпшника
4👍1🔥1
🧩 Eloquent-модель, которая знает слишком много

Модель Order ездит по всему приложению: контроллер → Action → Service → Job. И везде тащит не только данные, но и запросы, персистентность, связи, события. Бизнес-логика начинает зависеть от имён колонок (customer_id, total_cents) и может случайно дёрнуть ->delete().

Expressive ставит типизированную границу поверх Eloquent. БД остаётся за Eloquent, а логика работает с чистым типизированным объектом:
$order = OrderModel::query()
->findOrFail($id)
->expressive(attributes: ['payable']);


Что это даёт:

Типы видны в классе. $order->totalCents = '1000' отвергнет сам PHP. Енамы строкой не подсунешь.
Fail на границе. null в non-nullable свойстве — NonNullablePropertyException, а не сюрприз тремя методами позже.
Без ленивых сюрпризов. Связи мапятся, только если запросил их явно. Не запросил — null.
Генератор + sync. make:expressive поднимает класс из модели, expressive:sync ловит дрейф в CI.

Не тащите везде: CRUD живёт на голом Eloquent, для API — по-прежнему API Resources. Expressive — для важных бизнес-флоу, где модель несёт лишнюю ответственность.

🔗 Подробнее

Библиотека пхпшника
👍52🔥2
Какой тип связи реализуется через промежуточную таблицу?
Anonymous Quiz
3%
hasOne
23%
hasMany
51%
belongsToMany
23%
morphTo
👍5🤔21🔥1
⌨️ Топ-вакансий по PHP за неделю

PHP-разработчик — до 200 000 ₽ — удалёнка

PHP-разработчик — от 200 000 ₽ — гибрид (Москва)

Fullstack разработчик (Laravel + Vue.js/React.js) — от 1600 до 2240 $ — удалёнка

➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
🛒 Ecommerce-фреймворк, где ядро можно переопределять, не форкая

Bagisto — open-source ecommerce на Laravel 12 (PHP 8.3+), 27k звёзд.

Но интересен он не «магазином из коробки», а тем, как устроена кодовая база: это не монолит, а 30+ самостоятельных пакетов под Webkul\*, каждый со своими роутами, миграциями, моделями и тестами. Подключаются через Composer path-repositories и обычные сервис-провайдеры.

Каждая модель реализует контракт (интерфейс), а резолвится в рантайме через прокси. На практике это значит, что свой пакет может подменить ядровую модель Product или Order без правки core-файлов и без форка:
// твой ServiceProvider
$this->app->concord->registerModel(
\Webkul\Product\Contracts\Product::class,
\App\Models\CustomProduct::class
);


Каталог построен на EAV — гибкая схема атрибутов вместо раздувания таблицы товаров. Атрибуты раскладываются по families/groups, а значения пишутся в product_attribute_values, причём тип атрибута маппится на конкретную колонку через $attributeTypeFields (text / boolean / integer / datetime), а не сваливается в один value.

Доступ к данным — через repository pattern на prettus/l5-repository. Базовый Webkul\Core\Eloquent\Repository даёт критерии-фильтры, кэширование и оптимизацию запросов поверх Eloquent:
class ReturnRequestRepository extends Repository
{
public function model(): string
{
return 'Webkul\RMA\Contracts\ReturnRequest';
}
}


Из коробки также мультиканальность/мультитенант, POS, headless через Next.js и Flutter-приложение в отдельных репо. Админка на Vue 3.

Хороший кейс, если хочется посмотреть, как держать большой Laravel-проект модульным и расширяемым без боли при апгрейдах.

🔗 Репозиторий на GitHub

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5🔥4🥱2👍1
🔥 Строишь ИИ-агентов? Руководитель AI/ML-направления Сloud․ru покажет, где большинство архитектур ломаются, и как этого избежать.

18 июня в 19:00 совместно с Сloud․ru проведём открытый урок «Мультиагентные системы: почему большинство архитектур переусложнены».

Спикер — Дмитрий Юдин, эксперт по масштабированию и оптимизации вычислительных ресурсов для ML. Под его руководством развивается Evolution AI Factory — цифровая среда для работы с GenAI. Он занимается развитием сервисов генеративного ИИ, инфраструктуры для обучения больших языковых моделей и внедрением интеллектуальных агентов.

Что получишь на уроке:

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

🎁 Для участников урока подготовили промокод на скидку 10 000 ₽.

🗓️ Когда: 18 июня, 19:00 (МСК)

👉 Занять место на открытом уроке
💻 3 курса по цене одного — собери стек для оффера в топовую IT-компанию

Для следующего карьерного шага мало писать код. Работодатели ждут не только знания языка, но и понимания архитектуры, алгоритмов, автоматизации, AI-инструментов и агентных систем.

Одно направление закрывает только часть задачи.

Поэтому сейчас мы предлагаем освоить сразу несколько востребованных навыков — выбери любой курс и получи доступ еще к двум бесплатно 🔥

Собери стек навыков под свою цель:

🔹 подготовка к сильным компаниям (алгоритмы, архитектура);
🔹 переход в AI-направление (ИИ-агенты, AgentOps);
🔹 развитие в ML и Data Science (математика, основы ML);
🔹 новый оффер и рост дохода.

Полученные знания применяешь в работе уже во время обучения.

Акция действует 48 часов — 13 и 14 июня.

👉 Переходи на сайт, выбирай курсы и оставляй заявку — за 10 минут поможем собрать комплект под твою цель.
🥱2