Статті для PHP-розробників України
Технічні розбори, карʼєрні звіти й переклади документації. Кожен матеріал спирається на дані платформи: вакансії, вилки, банк питань, і на код, який можна запустити.
РЕДАКЦІЯ РАДИТЬ
КАРʼЄРА
3 вересня 2026
Зарплати PHP-розробників в Україні: що кажуть 457 анкет DOU за червень 2026
Медіана PHP-розробника чистими $3 300, Senior $4 000, продукт платить на $1 100 більше за аутсорс, а C1 додає до вилки майже тисячу доларів. Розбираємо сирі дані зарплатного опитування DOU, які портал перераховує автоматично.
РP
Редакція phpukraine
·
7 хв читання
49
статей
ПРОДУКТИВНІСТЬ
1 жовтня 2026
Індекси PostgreSQL для PHP-розробника: частинні, покривні, GIN і BRIN
Міграції в Laravel і Doctrine створюють btree і більше нічого. Але половина проблемних запитів у PHP-застосунку лікується індексом іншого типу: частинним на активні рядки, покривним з INCLUDE, за виразом lower(), GIN для jsonb або BRIN на таблиці подій. Розбираємо, коли який і як не додати п'ятий індекс, яким ніхто не користується.
РP
Редакція phpukraine
·
10 хв
·PostgreSQL
·Індекси
LARAVEL
1 жовтня 2026
Мультимовний сайт на Laravel: переклади, маршрути з мовою і hreflang
Переклад інтерфейсних рядків займає день. Решта часу йде на адреси, canonical, hreflang і на рішення, що робити зі статтею, якої другою мовою ще немає. Розбираємо плюралізацію для української в MessageSelector, локаль у префіксі маршруту замість cookie, таблицю перекладів з унікальним слагом на мову і місця, де локаль витікає у чергу й у листи.
РP
Редакція phpukraine
·
8 хв
·Локалізація
·SEO
КАРʼЄРА
1 жовтня 2026
Як читати PHP-вакансію: вилка, стек, «ринкова зарплата» і тривожні сигнали
Текст вакансії пишуть не для кандидата, а для внутрішнього погодження: рекрутер збирає вимоги з тімліда, HR додає блок про печиво й динамічну команду, хтось вставляє рядок про Kafka на майбутнє. Через це частина оголошення не означає нічого, а частина означає більше, ніж здається. Розбираю типові формулювання і те, що з них можна витягнути за двадцять хвилин першого дзвінка.
РP
Редакція phpukraine
·
8 хв
·Вакансії
·Пошук роботи
WORDPRESS
30 вересня 2026
WordPress на Composer: Bedrock, плагіни як залежності і деплой
WordPress звик сам собі перезаписувати файли, і саме через це деплой з git регулярно відкатує плагін, який хтось оновив з адмінки минулого тижня. Bedrock прибирає цю двозначність: ядро й плагіни стають залежностями Composer, конфіг переїжджає у змінні середовища, а продакшн залишається read-only. Розбираємо структуру, WPackagist, .env і порядок команд при релізі.
РP
Редакція phpukraine
·
7 хв
·Composer
·Bedrock
·Деплой
ТЕСТУВАННЯ
30 вересня 2026
Покриття коду: яке число має сенс і чому 100% не ціль
Один прогін дає три різні відсотки: рядки, гілки, шляхи. Розбираємо, що саме рахує php-code-coverage, чому загальне покриття на проєкті з історією нікого не рятує, і як поставити поріг у CI, щоб він ловив недотестований новий код, а не змушував писати тести на геттери.
РP
Редакція phpukraine
·
7 хв
·Покриття
·PHPUnit
·Pest
SYMFONY
30 вересня 2026
AssetMapper: фронтенд у Symfony без Node і збирання
Import map замість бандла: браузер сам розв'язує `import 'chart.js'`, а Symfony лише роздає файли з дайджестом у назві. Розбираємо, що саме рендерить `importmap()`, як пакети з jsDelivr опиняються в `assets/vendor/`, як сюди вписуються CSS і Tailwind без Node, який вигляд має деплой після `asset-map:compile` і в яких випадках Encore чи Vite все одно лишаються правильною відповіддю.
РP
Редакція phpukraine
·
7 хв
·AssetMapper
·Фронтенд
ПРОДУКТИВНІСТЬ
29 вересня 2026
HTTP-кеш для PHP-застосунку: Cache-Control, ETag і CDN перед Laravel
Запит, який не дійшов до php-fpm, коштує нуль. Але щоб віддати відповідь з edge або з браузера, треба правильно проставити Cache-Control, навчитися рахувати ETag до рендеру, а не після, і не покласти сторінку залогіненого користувача у спільний кеш. Розбираємо механіку на Laravel 13 і Cloudflare.
РP
Редакція phpukraine
·
8 хв
·HTTP-кеш
·CDN
·Cloudflare
LARAVEL
29 вересня 2026
Laravel Pennant: фіче-флаги без зовнішнього сервісу
Гілка живе третій тиждень, кожен rebase довший за попередній, а мержити страшно саме тому, що зміна велика. Pennant дозволяє везти незакінчений код у main і на прод, вмикаючи його поштучно: визначення фічі, скоуп, лотерея для поступового викочування, тести в обох станах і найважча частина - прибирання флага, коли він відпрацював.
РP
Редакція phpukraine
·
7 хв
·Pennant
·Фіче-флаги
КАРʼЄРА
29 вересня 2026
Live coding на PHP-співбесіді: як думати вголос і не завмерти
Live coding міряє інше, ніж знання алгоритмів: як ви розбираєте чужу задачу під чужим поглядом і з таймером. Далі три формати, які дають на PHP-позиціях, що питати до першого рядка коду, як озвучувати рішення, щоб інтерв'юер міг вам допомогти, і що робити в ті тридцять секунд, коли в голові порожньо.
РP
Редакція phpukraine
·
8 хв
·Співбесіда
·Live coding
WORDPRESS
29 вересня 2026
WooCommerce HPOS: що змінилось для плагінів і як перевести магазин
HPOS переносить замовлення з `wp_posts` і `wp_postmeta` у чотири власні таблиці, і після перемикання будь-який `get_post_meta($order_id, ...)` у вашому коді починає тихо повертати порожнечу. Розбираємо, як виглядає нова схема, які CRUD-методи й хуки замінюють роботу з постами, як оголосити сумісність через `FeaturesUtil` і в якому порядку безпечно вмикати синхронізацію, перемикати авторитетне сховище й перевіряти результат.
РP
Редакція phpukraine
·
8 хв
·WooCommerce
·HPOS
ТЕСТУВАННЯ
27 вересня 2026
Тести для легасі без тестів: з чого почати і що фіксувати першим
У проєкті нуль тестів, і завтра треба правити розрахунок цін. Unit-тести тут не працюють як перший крок: щоб ізолювати клас, його спершу треба відрефакторити, а рефакторити без тестів ви й не хотіли. Порядок дій інший: характеризаційні тести на HTTP, golden master для розрахунків, шви для залежностей, і лише потім unit.
РP
Редакція phpukraine
·
8 хв
·Легасі
·Характеризаційні тести
SYMFONY
27 вересня 2026
Symfony Scheduler замість cron: періодичні задачі як повідомлення
Crontab живе поза репозиторієм, не читається в code review і ніяк не тестується. Symfony Scheduler переносить розклад у код: `RecurringMessage`, воркер `messenger:consume scheduler_default`, lock проти дублювання на кількох машинах, stateful-режим для пропущених запусків і звичайні юніт-тести, які перевіряють дати наступних запусків.
РP
Редакція phpukraine
·
8 хв
·Scheduler
·Messenger
·Cron
ПРОДУКТИВНІСТЬ
27 вересня 2026
Автозавантаження в продакшені: classmap, authoritative і APCu у Composer
Кожен клас, який застосунок бачить уперше, проходить через Composer\Autoload\ClassLoader. Без classmap це серія звернень до файлової системи на кожен промах, і рахунок іде на сотні звернень за запит. Розбираємо, що насправді роблять --optimize-autoloader, --classmap-authoritative і --apcu-autoloader, чому authoritative тихо ламає типовий шаровий Dockerfile, і як виміряти ефект, а не вгадати його.
РP
Редакція phpukraine
·
8 хв
·Composer
·Автозавантаження
LARAVEL
25 вересня 2026
Власні касти в Eloquent: value objects у колонках без магії
Три колонки з зарплатою, які всюди читають разом, і JSON-масив тегів, який кожен нормалізує по-своєму. Кастом можна закрити обидва випадки так, щоб модель віддавала готовий обʼєкт, а база лишалась базою. Розбираємо CastsAttributes і Castable на Laravel 13, включно з тим, де каст перестає працювати: у `where`, в `isDirty` і в `toArray`.
РP
Редакція phpukraine
·
8 хв
·Eloquent
·Value objects
·Casts
КАРʼЄРА
25 вересня 2026
Тестове завдання на PHP-вакансію: як зробити, щоб його дочитали
Рецензент відкриває ваш архів між двома своїми задачами і спочатку не читає код: він шукає README, копіює звідти команду і дивиться, чи піднялося. Розбираю, що перевіряють у тестовому насправді, на чому кандидати зрізаються найчастіше і в яких випадках завдання краще не брати взагалі.
РP
Редакція phpukraine
·
8 хв
·Співбесіда
·Тестове завдання
SYMFONY
15 вересня 2026
Форми Symfony чи DTO з валідатором: як не потонути у FormType
`#[MapRequestPayload]` перетворює тіло запиту на типізований об'єкт і валідує його без жодного FormType, і для JSON-ендпоінтів це майже завжди правильний вибір. Але щойно з'являються вкладені колекції з кнопкою «додати рядок», залежні селекти й рендеринг помилок у Twig, форми повертають собі перевагу. Розбираємо, що саме робить резолвер під капотом, де він мовчки віддає 404 замість 422, як віддати формі й API один і той самий набір constraints і чому тест на DTO пишеться за три рядки, а на FormType - за тридцять.
РP
Редакція phpukraine
·
7 хв
·Forms
·DTO
·Validator
LARAVEL
15 вересня 2026
Livewire 4: де він доречний, а де краще звичайний запит або API
На phpukraine дев'ять Livewire-компонентів на весь портал: каталог вакансій, редактор статей, форми реєстрації й ліди. Стрічки статей, документації та компаній живуть на звичайних контролерах із soft-навігацією, а інструменти в /tools ходять у JSON-ендпоїнт. Розбираємо, за яким критерієм вибирається кожен із трьох варіантів і скільки коштує помилитись.
РP
Редакція phpukraine
·
7 хв
·Livewire
·Alpine
·Архітектура
LARAVEL
15 вересня 2026
Ролі, Gates і Policies в Laravel: як розкласти доступ без бібліотеки
Два enum-и, десяток policy-методів і один middleware закривають більшість задач з доступом у типовому застосунку. Розбираємо, коли роль у колонці краща за таблицю permissions, чому Policy належить агрегату, а Gate дії, де middleware дає лише ілюзію захисту і які тести на доступ мають бути обовʼязковими.
РP
Редакція phpukraine
·
7 хв
·Авторизація
·Policies
·Gates
LARAVEL
15 вересня 2026
Eloquent і доменна модель: де провести межу, щоб не переписувати все двічі
Мапер і репозиторій коштують конкретних рядків коду й конкретних незручностей. У Hiring на phpukraine вони є, у Content і Contact їх майже немає, і це не непослідовність, а різна ціна помилки. Розбираємо на власному коді, за якими ознаками приймалось рішення і які півзаходи не дають нічого.
РP
Редакція phpukraine
·
8 хв
·Eloquent
·DDD
·Репозиторії
КАРʼЄРА
15 вересня 2026
Що змінюється на PHP-співбесіді від junior до senior: за банком питань порталу
У банку питань порталу 117 карток: 36 junior, 52 middle, 29 senior. Я розклав їх за темами і за формулюваннями, щоб порахувати, що зʼявляється лише на senior, а що тягнеться через усі три рівні. Перелік тем майже не змінюється, змінюється форма питання: усі шість карток банку, чиє питання починається словом «Коли», мають рівень senior, і жодної такої немає ні в junior, ні в middle.
РP
Редакція phpukraine
·
7 хв
·Співбесіди
·Junior
·Senior
КАРʼЄРА
15 вересня 2026
Перша робота PHP-розробника у 2026: що просять у junior-вакансіях насправді
У каталозі порталу 78 активних вакансій від 63 компаній, і junior-позначку мають шість із них. Я прочитав ці шість по тексту оголошень і поклав поруч частоти технологій з усього каталогу: junior-вимоги виявились верхніми чотирма рядками загального списку, з яких прибрали все дороге.
РP
Редакція phpukraine
·
8 хв
·Junior
·Карʼєра
·Вакансії
WORDPRESS
14 вересня 2026
База даних у WordPress: коли WP_Query достатньо, а коли потрібен $wpdb і власна таблиця
Схема `wp_postmeta` з коробки має індекс на `post_id` і префіксний індекс на `meta_key`. Індексу на `meta_value` немає і не буде: це `longtext`. Тому будь-який фільтр за значенням мета-поля - це JOIN на кожну умову, повний перебір відібраних рядків і сортування у тимчасовій таблиці. Розбираємо, що видно в EXPLAIN, які параметри WP_Query реально економлять запити, як писати прямий SQL через $wpdb без дірок, і в якій точці чесніше завести власну таблицю з нормальними індексами замість того, щоб рятувати postmeta.
РP
Редакція phpukraine
·
8 хв
·WP_Query
·wpdb
·Продуктивність
SYMFONY
14 вересня 2026
Авторизація в Symfony: voters, атрибути IsGranted і межа з бізнес-правилами
Роль відповідає на питання «хто ти», voter - на питання «чи можна тобі зробити це саме з цим об'єктом». Розбираємо voter на прикладі редагування чужої вакансії, `CacheableVoterInterface` і чому без нього воутер викликається завжди, `#[IsGranted]` із subject та Expression, статус 404 замість 403, і де проходить межа, за якою перевірка перестає бути авторизацією і стає бізнес-правилом.
РP
Редакція phpukraine
·
8 хв
·Security
·Voters
·Авторизація
WORDPRESS
13 вересня 2026
WP-Cron і фонові задачі у WordPress: чому він не спрацьовує і чим замінити
WP-Cron нічого не запускає сам: це черга подій у таблиці `options`, яку розбуджує чужий HTTP-запит. Звідси всі класичні симптоми - задачі, що не виконуються на тихому сайті, і десятки паралельних `wp-cron.php`, що з'їдають пул PHP-FPM на гучному. Розбираємо механіку spawn_cron, перехід на системний cron через WP-CLI, Action Scheduler для довгих черг і те, чого в обох бракує з коробки: логування й повторні спроби.
РP
Редакція phpukraine
·
8 хв
·WP-Cron
·Фонові задачі
·Action Scheduler
ТЕСТУВАННЯ
13 вересня 2026
Час, випадковість і зовнішні API в тестах: як зробити їх передбачуваними
Тест, який падає раз на тиждень о 00:59 або коли packagist.org відповідає повільно, нічого не перевіряє. Розбираємо три джерела недетермінізму і три способи їх прибрати: порт Clock замість now(), джерело випадковості за інтерфейсом і фейк порту замість Http::fake у кожному тесті.
РP
Редакція phpukraine
·
7 хв
·Тестування
·Clock
·Fakes
ТЕСТУВАННЯ
13 вересня 2026
Мутаційне тестування з Infection: що воно знаходить у зелених тестах
Зелений сьют і 100% покриття кажуть лише те, що рядки виконувались. Infection ламає код навмисно й показує, які зміни ваші тести пропускають. Розбираємо перший запуск, читання вижилих мутантів і те, як не втопити CI.
РP
Редакція phpukraine
·
4 хв
·Infection
·Мутаційне тестування
·Pest
ТЕСТУВАННЯ
13 вересня 2026
Що саме охороняти архітектурними тестами: сім правил, які окупаються
Заборона Illuminate у домені - це перше правило, а не весь набір. Сім конкретних arch-правил на Pest, які ловлять реальні поломки: витік Eloquent у use case, цикл між контекстами, мутабельний value object і unit-тести, що непомітно ходять у базу.
РP
Редакція phpukraine
·
6 хв
·Pest
·Архітектура
·Шари
ПРОДУКТИВНІСТЬ
12 вересня 2026
Redis у PHP-застосунку не лише як кеш: черги, ліміти, блокування, лічильники
Redis заводять під кеш, а за пів року в ньому живуть сесії, черги, локи й лічильники з несумісними вимогами до втрати даних. Розбираємо атомарність лічильників і чому `INCR` + `EXPIRE` рано чи пізно забанить користувача назавжди, де ламаються розподілені локи, що насправді робить redis-драйвер черги в Laravel і коли його вже мало, які дані в Redis класти не варто і як налаштувати eviction, щоб під тиском памʼяті втратити кеш, а не чергу.
РP
Редакція phpukraine
·
9 хв
·Redis
·Черги
·Rate limiting
ПРОДУКТИВНІСТЬ
12 вересня 2026
N+1 у Doctrine та Eloquent поруч: одна проблема, два набори інструментів
Ліниві звʼязки протікають однаково в обох ORM, а лагодяться по-різному: Eloquent добирає дані окремим запитом WHERE IN, Doctrine тягне їх fetch join'ом у той самий SQL. Три типові сценарії - список зі звʼязком, вкладені звʼязки й агрегати - з кодом до і після в Laravel 13 та Doctrine ORM 3.
РP
Редакція phpukraine
·
8 хв
·N+1
·Doctrine
·Eloquent
ПРОДУКТИВНІСТЬ
6 вересня 2026
PHP-FPM, FrankenPHP чи Octane: що обрати для Laravel і Symfony у 2026
Порівняння трьох моделей виконання без чужих бенчмарків: що саме випливає з архітектури кожної — які межі паралелізму вона задає, що ламається, коли застосунок перестає вмирати після запиту, і як змінюється деплой. У кінці — чекліст, за яким рішення приймається за пів години, а не за спринт.
РP
Редакція phpukraine
·
9 хв
·FrankenPHP
·Octane
·PHP-FPM
ПРОДУКТИВНІСТЬ
5 вересня 2026
Кеш у Laravel без застарілих даних: теги, lock і інвалідація по подіях
Кеш віддає старе не тому, що «TTL завеликий», а тому що інвалідація має дірки: масові апдейти повз модельні події, скидання всередині транзакції, дві паралельні перебудови одного ключа. Розбираємо, як насправді працюють теги в Redis, коли вони не потрібні, як накрити перебудову атомарним локом і куди правильно вішати інвалідацію.
РP
Редакція phpukraine
·
7 хв
·Кеш
·Redis
·Laravel
КАРʼЄРА
4 вересня 2026
Продукт чи аутсорс: що обрати PHP-розробнику і чим це коштує
У зарплатному звіті порталу медіана продуктової компанії $4 000 проти $2 900 в аутсорсі, на грейді Senior — $4 500 проти $3 500. Але медіана описує, хто де вже працює, а не ціну переходу. Розбираємо, з чого складається ця різниця в щоденному коді: горизонт життя коду, хто обирає версію PHP, що вважається успіхом і чого від вас навчиться наступна співбесіда.
РP
Редакція phpukraine
·
8 хв
·Карʼєра
·Зарплати
ПРОДУКТИВНІСТЬ
4 вересня 2026
EXPLAIN для PHP-розробника: як читати план запиту в PostgreSQL
План запиту — не магія, а дерево вузлів із двома числами на кожному: скільки планувальник очікував і скільки насправді сталося. Розбираємо, чим Seq Scan відрізняється від Bitmap, чому оцінка розходиться з фактом, як порядок колонок у складеному індексі вирішує все і які плани дають типові конструкції Eloquent — whereHas, paginate, whereDate, withCount.
РP
Редакція phpukraine
·
8 хв
·PostgreSQL
·EXPLAIN
·Індекси
КАРʼЄРА
4 вересня 2026
Резюме PHP-розробника, яке читають: структура, стек, приклади
Резюме читають не для того, щоб оцінити вас, а для того, щоб швидко відповісти на одне питання: чи варто витрачати годину на дзвінок. Розбираємо, що має бути на першому екрані, як писати стек так, щоб він не виглядав як тег-хмара з 2014 року, і чому рядок «PHP 8.1» у 2026 році сам по собі є сигналом.
РP
Редакція phpukraine
·
8 хв
·Резюме
·Карʼєра
КАРʼЄРА
4 вересня 2026
З Middle у Senior: що насправді відрізняє грейди на PHP-співбесідах
У банку питань порталу 52 картки: 13 junior, 25 middle, 14 senior. Якщо покласти senior-картки поруч із middle, різниця виявляється не в складності тем, а в тому, що питають: middle пояснює механіку, senior пояснює збій, називає ціну рішення і має критерії там, де правильної відповіді не існує.
РP
Редакція phpukraine
·
7 хв
·Співбесіди
·Senior
·Карʼєра
WORDPRESS
4 вересня 2026
Persistent object cache у WordPress: коли Redis рятує, а коли ні
Redis для WordPress продають як універсальне пришвидшення, але object cache працює лише там, де сторінка справді ходить у базу по одні й ті самі об'єкти. Розбираємо, що саме кешує `wp_cache_*`, чому за page cache виграш може бути нульовим, як рахувати вартість round-trip, чим небезпечна евікція для сесій WooCommerce і як писати код, що коректно поводиться і з persistent, і з per-request кешем.
РP
Редакція phpukraine
·
8 хв
·Продуктивність
·Redis
·Object cache
ТЕСТУВАННЯ
4 вересня 2026
CI на 20 хвилин: що прискорювати першим у PHP-проєкті
Коли пайплайн триває 20 хвилин, розробники перестають чекати на зелений білд і мержать наосліп. Розбираємо, у якому порядку різати цей час у типовому Laravel-проєкті: від безкоштовних налаштувань раннера до паралельного запуску, який має йти останнім, а не першим.
РP
Редакція phpukraine
·
6 хв
·CI
·PHPUnit
·Продуктивність тестів
ТЕСТУВАННЯ
4 вересня 2026
Feature-тести HTTP у Pest: перевіряти сторінку, а не реалізацію
Feature-тест має відповідати на питання «що отримає браузер і краулер», а не «які методи викликав контролер». Розбираємо на реальних тестах phpukraine: canonical, meta robots, JSON-LD і sitemap — що перевіряти в HTTP-тесті, що винести в юніт і як не переписувати тести після кожного рефакторингу вʼю.
РP
Редакція phpukraine
·
7 хв
·Pest
·Feature-тести
·Laravel
ТЕСТУВАННЯ
4 вересня 2026
Фейки замість моків: як тестувати use case без бази
Мок, який знає про кожен виклик репозиторію, ламається від будь-якого рефакторингу і при цьому не перевіряє стан. Показуємо, як in-memory реалізація порту на 20 рядків і FrozenClock замінюють десяток shouldReceive і роблять unit-тести use case швидкими та детермінованими.
РP
Редакція phpukraine
·
7 хв
·Unit-тести
·DDD
·Фейки
ПРОДУКТИВНІСТЬ
4 вересня 2026
OPcache, preload і FrankenPHP: що реально прискорює Laravel у контейнері
Розбираємо по кроках, що відбувається з PHP-кодом на кожному запиті в Docker-образі: які параметри OPcache справді важать, що дає opcache.preload і де він ламається, чому worker mode FrankenPHP знецінює половину цих налаштувань і як виміряти ефект так, щоб цифри щось означали.
РP
Редакція phpukraine
·
8 хв
·OPcache
·FrankenPHP
·Docker
WORDPRESS
4 вересня 2026
Безпека плагіна WordPress: чекліст із nonces, capabilities і екранування
Плагін у WordPress живе всередині чужого сайту й успадковує його права: одна необроблена змінна в SQL або один POST без перевірки — і скомпрометовано весь інстанс. Розбираємо модель загроз, різницю між nonce і capability, правильне екранування, підготовлені запити, permission_callback у REST API та чекліст, який варто пройти перед кожним релізом.
РP
Редакція phpukraine
·
8 хв
·Безпека
·Плагіни
SYMFONY
4 вересня 2026
Теговані сервіси й compiler passes: розширення без правки чужого коду
Точка розширення в Symfony — це не інтерфейс і не абстрактний клас, а тег у контейнері. Розбираємо, як тег перетворюється на `iterable` чи `ServiceLocator` у конструкторі, коли атрибутів уже не вистачає і треба писати compiler pass, у якому порядку проходи виконуються, чому ваш сервіс зникає до того, як пас до нього дійде, і як усе це дебажити через `debug:container`.
РP
Редакція phpukraine
·
9 хв
·DI-контейнер
·Compiler passes
SYMFONY
3 вересня 2026
Messenger і outbox: як не втратити подію між транзакцією і брокером
Класична дірка: сутність збережена, а повідомлення в брокер не пішло — або пішло, а транзакція відкотилась. Symfony Messenger вміє закривати її без окремої бібліотеки: Doctrine transport пише повідомлення тим самим з'єднанням, що й ваші сутності, тож INSERT потрапляє в ту саму транзакцію. Розбираємо конфіг, ретраї, failed transport, дедуплікацію на боці споживача і випадки, коли весь цей апарат вам не потрібен.
РP
Редакція phpukraine
·
9 хв
·Messenger
·Outbox
·Doctrine
LARAVEL
3 вересня 2026
Laravel 13: що змінилось для щоденного коду
Laravel 13 вийшов 17 березня 2026 року і в офіційному гайді оцінений у десять хвилин апгрейду. Це майже правда: ламких змін мало, але серед них перейменований CSRF-мідлвар, кеш і сесія, які більше не десеріалізують що завгодно, і кілька перейменованих властивостей у подіях черги. Розбираємо за кодом v13.30.1, що саме доведеться поправити і що нового реально стане в пригоді.
РP
Редакція phpukraine
·
5 хв
·Laravel 13
·Оновлення
LARAVEL
3 вересня 2026
Filament 5 для адмінки контентного сайту: що дає з коробки і де межа
Панель phpukraine живе на /panel: Filament v5.7 поверх Laravel 13 і Livewire 4. Вакансії й ліди в ній редагуються, а контент — ні, бо його джерело у файлах репозиторію. Розбираємо, що генерує make:filament-resource, як зробити ресурс лише для перегляду, звідки віджети беруть цифри і в якій точці Filament перестає допомагати.
РP
Редакція phpukraine
·
7 хв
·Filament
·Адмінка
·Eloquent
LARAVEL
3 вересня 2026
Черги в Laravel без сюрпризів: ідемпотентність, повтори і afterCommit
Черга гарантує, що job виконається щонайменше один раз, а не рівно один. Розбираємо, звідки беруться дублі й втрачені задачі, як налаштувати tries, backoff і retryUntil, чому afterCommit обовʼязковий і як написати handle, який можна безпечно виконати двічі.
РP
Редакція phpukraine
·
8 хв
·Черги
·Ідемпотентність
·Horizon
КАРʼЄРА
3 вересня 2026
Зарплати PHP-розробників в Україні: що кажуть 457 анкет DOU за червень 2026
Медіана PHP-розробника чистими $3 300, Senior $4 000, продукт платить на $1 100 більше за аутсорс, а C1 додає до вилки майже тисячу доларів. Розбираємо сирі дані зарплатного опитування DOU, які портал перераховує автоматично.
РP
Редакція phpukraine
·
7 хв
·Зарплати
·DOU
·Співбесіди
LARAVEL
2 вересня 2026
N+1 в Eloquent: як знайти, виправити і більше не допустити
Кожен запит швидкий, а сторінка повільна. Розбираємо механіку N+1 у Laravel, три способи його зловити до продакшену і випадки, коли eager loading робить гірше.
РP
Редакція phpukraine
·
4 хв
·Eloquent
·N+1
·Продуктивність
ТЕСТУВАННЯ
1 вересня 2026
Архітектурні тести в Pest: як заборонити Illuminate у домені й перестати про це сперечатись
Домовленості про шари живуть у README, доки хтось не імпортує фасад у value object. Показуємо, як phpukraine тримає межі модульного моноліту шістьма тестами, що падають на code review, а не в продакшені.
МЛ
Михайло Левицький
·
4 хв
·Pest
·Архітектура
·DDD