Junior: питання на співбесіді з теми «Налагодження»
Питання з реальних співбесід з відповідями: Laravel і PHP, бази даних, JavaScript і фронтенд, Git, Docker, API, безпека й архітектура. Тими самими темами, що й тести.
2 питання
Обидва виводять значення в зручному вигляді через Symfony VarDumper:
dump($var)- друкує значення й продовжує виконання.dd($var)- «dump and die»: друкує й зупиняє виконання.
dump($user); // подивитись і йти далі
dd($request->all()); // подивитись і зупинитись
Споріднене: dump() для ланцюжків (->dump() на колекції/запиті), ray() (пакет), Log::debug() для логів замість виводу на екран.
Коли APP_DEBUG=true, Laravel показує сторінку помилки з усім потрібним для розслідування. Головне - читати її в правильному порядку.
1. Клас винятку й повідомлення вгорі сторінки - найважливіше:
| Що бачите | Що це зазвичай означає |
|---|---|
ModelNotFoundException |
findOrFail чи прив'язка моделі до маршруту не знайшли запис |
QueryException |
помилка SQL: немає колонки, таблиці, порушено обмеження |
ErrorException: Undefined array key |
звернення до ключа, якого немає |
TypeError |
у функцію передано значення не того типу (часто null) |
ViewException |
помилка всередині Blade-шаблону - справжня причина нижче в ланцюжку |
2. Перший кадр вашого коду. Стек викликів читається згори вниз: верхній кадр - де виняток кинуто. Часто це код фреймворку чи пакета, і він не винен. Сторінка позначає кадри з vendor/ окремо й згортає їх - шукайте перший кадр з app/, routes/ чи resources/: там рядок, який викликав проблему.
3. Попередні винятки. Якщо виняток обгорнуто (як ViewException), справжня причина - у «previous exception». Сторінка показує весь ланцюжок.
4. Контекст запиту: маршрут, контролер, middleware, параметри, заголовки, тіло запиту й виконані SQL-запити. Часто відповідь там: не той ідентифікатор у параметрі, порожнє поле форми.
Корисні дрібниці:
- кнопка копіювання помилки в Markdown - зручно вставити в задачу чи в чат з AI-асистентом;
- посилання на файли відкриваються в IDE, якщо вказати редактор у
config/app.php:'editor' => 'phpstorm'; - те саме, що на сторінці, записано в
storage/logs/laravel.log- для помилок у чергах і командах, де сторінки немає.
На продакшені APP_DEBUG має бути false: сторінка розкриває змінні оточення, запити й код. Користувач бачить загальну сторінку 500, а деталі - в логах і системі моніторингу помилок.