uz
Feedback
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Kanalga Telegram’da o‘tish

Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/bca892d6 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b

Ko'proq ko'rsatish

📈 Telegram kanali Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter analitikasi

Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 10 699 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 11 619-o'rinni va Rossiya mintaqasida 61 433-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 10 699 obunachiga ega bo‘ldi.

07 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -47 ga, so‘nggi 24 soatda esa -7 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 15.28% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 9.03% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 635 marta ko‘riladi; birinchi sutkada odatda 966 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 10 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent php, laravel, пхпшника, artisan, api kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/bca892d6 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b

Yuqori yangilanish chastotasi (oxirgi ma’lumot 08 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

10 699
Obunachilar
-724 soatlar
-197 kunlar
-4730 kunlar
Postlar arxiv
⚙️ Полезный инструмент для работы с JSON JSON-файлы с высокой вложенностью часто сложно прочитать. 𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает
⚙️ Полезный инструмент для работы с JSON JSON-файлы с высокой вложенностью часто сложно прочитать. 𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми. Кроме того, созданные диаграммы можно скачать в виде изображений. Также поддерживает YAML и XML форматы.

Объясни разницу между Gate и Policy в Laravel? Оба инструмента для авторизации, но с разной областью применения. Gateпростые одиночные проверки, не привязанные к модели:
// Определяем в AuthServiceProvider
Gate::define('access-admin-panel', function (User $user) {
    return $user->is_admin;
});

// Проверяем
if (Gate::allows('access-admin-panel')) { ... }
// или в контроллере
$this->authorize('access-admin-panel');
Policy класс с набором правил для конкретной модели:
// php artisan make:policy PostPolicy --model=Post
class PostPolicy
{
    public function update(User $user, Post $post): bool
    {
        return $user->id === $post->user_id;
    }

    public function delete(User $user, Post $post): bool
    {
        return $user->id === $post->user_id || $user->is_admin;
    }
}

// Использование
$this->authorize('update', $post);
Правило выбора — Нет модели → Gate — Есть модель, несколько действий → Policy

⚡️ Мы рады представить команду экспертов курса AgentOps! — Дмитрий Антипов расскажет, как грамотно проверить работу AI-моделе
⚡️ Мы рады представить команду экспертов курса AgentOps!Дмитрий Антипов расскажет, как грамотно проверить работу AI-моделей — Курилл Кухарев поделится, почему компаниям выгодно использовать локальные модели и как их развернуть — Андрей Носов расскажет, как работать с данными и знаниями в AI-системах: построение RAG, выбор подходов к поиску и организация хранения данных — Антон Будняк разберет, как обеспечить устойчивость сервиса, в котором используется ИИ — Александр Ошурков расскажет, как оценивать качество работы LLM в backend-сервисах — Екатерина Трофимов разберет, как проектировать инструменты для AI-агентов и выстраивать взаимодействие с внешними сервисами Курс для backend-разработчиков, тимлидов и LLM инженеров о том, как внедрять AI-логику в бэкенд IT-продуктов и сохранять стабильность сервиса. К концу обучения вы получите: • Структурированный подход к архитектуре и деплою AI-агентов • Навыки настройки мониторинга, тестирования и контроля расходов на токены • Разбор сложных инженерных кейсов из реальной практики 🎁 Доступ к материалам курса «Разработка ИИ-агентов» в подарок при покупке Инженерного трека 👉 Все подробности и программа обучения.

#байтовый_юмор
#байтовый_юмор

🐘 Меняем директивы PHP на лету Знаете, что можно изменить параметры среды выполнения прямо в рантайме без перезапуска сервера и правки конфигов? 🔹 Зачем это нужно — ini_set() меняет параметры для текущего запроса: удобно для скриптов с нестандартными требованиями к памяти или таймаутам. — ini_get() покажет реальное значение, которое видит ваш процесс, а не то, что вы написали в конфиге три года назад. — Мгновенно отвечает на вопрос «а почему memory_limit игнорируется?» — Работает без доступа к серверу, рестартов и DevOps-тикетов. 🔹 Как использовать Посмотреть реальное значение директивы:
echo ini_get('memory_limit'); // '128M'
Переопределить на лету для тяжёлого импорта:
ini_set('memory_limit', '512M');
ini_set('max_execution_time', '300');
Дамп всех активных настроек:
phpprint_r(ini_get_all());
Только настройки конкретного расширения:
phpprint_r(ini_get_all('session'));
Проверить, откуда пришло значение — из php.ini, .htaccess или кода:
php$all = ini_get_all(null, true);
print_r($all['memory_limit']);
// ['global_value' => '128M', 'local_value' => '512M', 'access' => 7]
⚠️ Не все директивы можно менять через ini_set(), каждая имеет уровень доступа. Если ini_set() возвращает false — директива системная, её меняет только php.ini или конфиг пула php-fpm. Смотрите поле access в выводе ini_get_all(): 1 — можно из кода, 2 — только .htaccess/пул, 4 — только php.ini, 7 — везде.

☕️ Меняем php.ini на лету Знаете, что ваше приложение может изменить параметры среды выполнения прямо в рантайме без перезапуска сервера и правки конфигов? 🔹 Зачем это нужно — ini_set() меняет параметры для текущего запроса: удобно для скриптов с нестандартными требованиями к памяти или таймаутам. — ini_get() покажет реальное значение, которое видит ваш процесс, а не то, что вы написали в конфиге три года назад. — Мгновенно отвечает на вопрос «а почему memory_limit игнорируется?» — Работает без доступа к серверу, рестартов и DevOps-тикетов. 🔹 Как использовать Посмотреть реальное значение директивы:
echo ini_get('memory_limit'); // '128M'
Переопределить на лету для тяжёлого импорта:
ini_set('memory_limit', '512M');
ini_set('max_execution_time', '300');
Дамп всех активных настроек:
phpprint_r(ini_get_all());
Только настройки конкретного расширения:
phpprint_r(ini_get_all('session'));
Проверить, откуда пришло значение — из php.ini, .htaccess или кода:
php$all = ini_get_all(null, true);
print_r($all['memory_limit']);
// ['global_value' => '128M', 'local_value' => '512M', 'access' => 7]
⚠️ Не все директивы можно менять через ini_set(), каждая имеет уровень доступа. Если ini_set() возвращает false — директива системная, её меняет только php.ini или конфиг пула php-fpm. Смотрите поле access в выводе ini_get_all(): 1 — можно из кода, 2 — только .htaccess/пул, 4 — только php.ini, 7 — везде.

🏃‍♀️ Уже завтра стартует курс по разработке AI-агентов. Про AI-агентов часто думают, что это просто модная обертка над джпт
🏃‍♀️ Уже завтра стартует курс по разработке AI-агентов. Про AI-агентов часто думают, что это просто модная обертка над джпт для пет-проектов. Кажется, прикрутил API к скрипту и типа готово. А вот и нет! Когда дело доходит до прода, начинаются настоящие проблемы.
Зачем глубоко копать мультиагентные системы, если можно обойтись старым добрым кодом? Как контролировать расходы на токены, чтобы новая фича не разорила бизнес? Как заставить агента работать стабильно и предсказуемо, а не галлюцинировать?
Эту инженерную часть мы и будем разбирать на курсе. Будем учиться интегрировать внешние API, работать с RAG, LangGraph, CrewAI и деплоить всё это так, чтобы работало как часы. Стартуем завтра. Для участия и доступа к программе переходите по ссылке.

💬 Обратная связь Сколько среди нас джедаев синьоров? Понятно, что грейд — довольно относительная история, но примерно ваш грейд: 🔥 — Senior 👍🏼 — Middle ❤️ — Junior 😁 — Ещё учусь

🦾 Надоело чинить «упавших» ИИ-агентов после каждого микросбоя внешних сервисов? Анонсируем старт продаж большого курса по Ag
🦾 Надоело чинить «упавших» ИИ-агентов после каждого микросбоя внешних сервисов? Анонсируем старт продаж большого курса по AgentOps. Мы собрали опыт десятков разработчиков и сделали программу, которая учит выводить ИИ в стабильный прод. 🗓 Ждем вас 28 апреля в 19:00 МСК на эфире: «Как эффективно управлять контекстным окном LLM в мультиагентных системах и не сливать бюджет на токены». 👉 Кто вещает и в чем польза? Спикер Кирилл Кухарев (Senior AI Engineer в Raft, спикер AI Conf и Highload++). Он реализовал более 50 коммерческих проектов в GenAI и на вебинаре покажет, как взять под контроль работу нескольких агентов, чтобы они не перекидывали друг другу лишний контекст и не сжигали ваши деньги. В прямом эфире разберем: • Как формируется контекст в LLM при маршрутизации между агентами; • Куда утекают лишние токены и возникает перерасход; • Практические методы: как сжимать историю, грамотно делить задачи, лимитировать передачу контекста и собирать промпты прямо в процессе запроса пользователя. 🔥 Два способа получить максимум: 1. Приходите на вебинар 28 апреля. Дарим участникам промокод на 5.000 ₽ (работает 3 дня после эфира - это шанс забрать курс по самому низу рынка). 2. Выбирайте Инженерный трек. В подарок к нему идет полный доступ к записям и автопроверкам завершенного курса «Разработка ИИ-агентов». 👉 Занять место на вебинаре и стать профи в AgentOps

🤔 Repository в Laravel: паттерн или антипаттерн? Eloquent — это Active Record. Когда ты оборачиваешь его в репозиторий и возвращаешь User::where(...)->get(), ты не абстрагируешься от ORM. Ты просто перекладываешь Eloquent в другой класс. Настоящий репозиторий возвращает доменные объекты, а не модели с методами ->save() и ->delete(). 💬 Что думаете? 🐸 Библиотека пхпшника #междусобойчик

Symfony Workflow: конечный автомат для реализации бизнес-логики. Бесплатный урок курса «Symfony Framework» Во многих приложен
Symfony Workflow: конечный автомат для реализации бизнес-логики. Бесплатный урок курса «Symfony Framework» Во многих приложениях бизнес-логика держится на статусах: заказ создан, оплачен, отправлен, доставлен. Пока таких состояний мало, всё кажется простым. Но как только процесс растёт, цепочки if/else начинают расползаться по проекту, логика дублируется, а добавление нового статуса превращается в риск для всей системы. 📅 На открытом уроке 22 апреля: — Разберём, как использовать Symfony Workflow для формализации бизнес-процессов через конечный автомат. — Покажем, чем конечный автомат отличается от рабочего процесса, когда применять каждый подход, как описывать состояния и переходы в YAML и как Symfony умеет автоматически визуализировать процесс. — На практическом примере рассмотрим сущность заказа со статусами new → paid → shipped → delivered, методы can() и apply(), а также построение схемы состояний через workflow:dump.
Урок не для тех, кто считает, что строковое поле status и набор if/else — это нормальная архитектура «на вырост», и не для тех, кто не работает со сложной бизнес-логикой в приложении.
👉 Записаться: https://clc.to/N5HZ-w Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

⚡️ array_walk и внешний контекст Многие не используют третий аргумент array_walk — а зря.
$discounts = ['vip' => 0.3, 'regular' => 0.1];
$prices    = ['vip' => 1000, 'regular' => 500];

array_walk($prices, function (&$price, $key, $discounts) {
    $price -= $price * ($discounts[$key] ?? 0);
}, $discounts);

// ['vip' => 700, 'regular' => 450]
Третий аргумент — проброс внешних данных прямо в коллбэк. Не нужен use, не нужна глобальная переменная. Читается чище, зависимости явные и сразу видно, что коллбэк работает с $discounts. 🐸 Библиотека пхпшника #vardump

Какова временная сложность сортировки слиянием (Merge Sort) в худшем случае?
Anonymous voting

Исследование облачных платформ Apple Hills Digital собирает мнения специалистов об инфраструктуре: облака, гибридные решения,
Исследование облачных платформ Apple Hills Digital собирает мнения специалистов об инфраструктуре: облака, гибридные решения, on-premise. Можно пройти короткий отбор (~3 минуты) и попасть в основную часть исследования. Дополнительно — участие в розыгрыше iPhone* * Принимая участие в опросе Вы становитесь участником розыгрыша под наименованием «Если ты работаешь в IT, пройди опрос и выиграй iPhone 17 Pro». Информация об организаторе розыгрыша, сроках проведения, правилах проведения розыгрыша, количестве призов, сроках, месте, порядке получения призов размещена по ссылке.

🐳 Фишка Docker CLI Контейнер запустился, но ведёт себя странно — не то сетевое окружение, не те переменные, непонятно что вообще внутри? Просто запустите docker inspect, и у вас будет полная картина без лишних инструментов. 🔹 Зачем это нужно — Возвращает полный JSON с внутренностями: переменные окружения, тома, сетевые настройки, лимиты ресурсов, entrypoint, restart policy. — Работает не только с контейнерами — понимает образы, тома и сети. — Незаменимо, когда нужно быстро понять, почему контейнер ведёт себя не так, как ожидается. 🔹 Как использовать — Полный дамп: docker inspect my-container — Только IP-адрес: docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container — Все переменные окружения: docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' my-container — Смонтированные тома: docker inspect -f '{{json .Mounts}}' my-container | jq Флаг -f принимает Go-шаблоны — вытащите ровно то поле, которое нужно, без парсинга тысячи строк JSON вручную.

#байтовый_юмор
#байтовый_юмор

🔥 Настройка Pest PHP Если ты всё ещё пишешь тесты на чистом PHPUnit с setUp() и простынями $this->assert... — этот пост для тебя. Настраиваем Pest с нуля в реальном Laravel-проекте. 📦 Шаг 1 — Установка
composer require pestphp/pest --dev
composer require pestphp/pest-plugin-laravel --dev
php artisan pest:install
После этого в корне появится tests/Pest.php — файл для глобальных хелперов и настроек. Не игнорируй его. ✍️ Шаг 2 — Первый тест Забудь про классы. Pest — это функции:
it('создаёт пользователя через API', function () {
    $response = $this->postJson('/api/users', [
        'name'  => 'Ivan',
        'email' => 'ivan@example.com',
    ]);

    $response->assertCreated();
    expect($response->json('data.name'))->toBe('Ivan');
});
🧩 Шаг 3 — Datasets (параметризованные тесты) Вместо копипасты одного теста на каждый кейс:
it('валидирует email', function (string $email) {
    $response = $this->postJson('/api/users', [
        'email' => $email
    ]);
    $response->assertUnprocessable();
})->with([
    'пустой'       => [''],
    'без собаки'   => ['notanemail'],
    'только домен' => ['@example.com'],
]);
⚙️ Шаг 4 — Глобальные настройки в Pest.php Открываем tests/Pest.php и настраиваем раз и навсегда:
uses(
    Tests\TestCase::class,
    Illuminate\Foundation\Testing\RefreshDatabase::class,
)->in('Feature');

expect()->extend('toBeSuccess', function () {
    return $this->toMatchArray([
        'status' => 'success'
    ]);
});
Теперь RefreshDatabase не нужно писать в каждом файле, а кастомные матчеры делают тесты выразительнее. 🚀 Шаг 5 — Запуск
./vendor/bin/pest
./vendor/bin/pest --filter="создаёт пользователя"
./vendor/bin/pest --coverage    # требует Xdebug или PCOV
💡 Почему Pest, а не чистый PHPUnit? Меньше бойлерплейта, человекочитаемый вывод, встроенные архитектурные тесты (arch()) и отличная интеграция с Laravel. Команда Laravel официально рекомендует его с 11-й версии фреймворка. Ставьте 🔥 если используете Pest.

🖥 Мультиагентная разработка на PHP Пока одни продолжают спорить «нужен ли AI в разработке», другие уже автоматизируют рутину через цепочки специализированных агентов — и делают это прямо в PHP-проектах. Свежая статья на Хабре от PHP-разработчика, который прошёл путь от «AI неудобен» до полноценного пайплайна с оркестрацией агентов в продакшене. Что внутри: — Почему один большой промпт не работает, и как принцип "один агент — одна ответственность" решает проблему размытия контекста — Как выстроить цепочку: php-developer → phpstan-developer → php-test-developer → авто-фиксер — каждый в своём чистом контексте — Specification-Driven Development на практике: спека первична, код вторичен — Реальный опыт с Claude Code, RooCode, KiloCode — с честными плюсами и минусами 🔗 Читать на Хабре

🐳 Фишка Docker CLI Запустите docker stats с правильными флагами, и вы увидите всё в реальном времени. 🔹 Зачем это нужно — Показывает live-метрики по CPU, памяти, сети и I/O для всех запущенных контейнеров. — Критично для Java-сервисов: помогает поймать утечки памяти, GC pressure и неожиданный CPU spike прямо в момент нагрузки. — Работает без установки каких-либо агентов. — В отличие от top внутри контейнера видит реальные лимиты cgroup, а не ресурсы хоста. 🔹 Как использовать — Все контейнеры в реальном времени: docker stats — Конкретный сервис: docker stats my-spring-app — Один снимок без стриминга: docker stats --no-stream — Только нужные поля: docker stats --format "table {{.Name}}\t{{.MemUsage}}\t{{.CPUPerc}}" — В JSON для скриптов: docker stats --no-stream --format json Флаг --format принимает Go-шаблоны — те же, что и в docker inspect. Можно вывести ровно то, что нужно, и скормить в jq или свой мониторинг-скрипт. ⚠️ Если контейнер запущен без -m / --memory, JVM видит всю память хоста и выставляет heap соответственно. docker stats мгновенно покажет, есть ли лимит — колонка MEM USAGE / LIMIT.