<? phpukraine СТАТТІ
⌕Пошук по платформі

Статті для 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