Сложната част от това е упоритият отказ на браузъра да разкрие каквато и да е форма на съобщение за грешка. Когато това се случи, обичам да отида на командния ред и да го пробвам, като по този начин елиминирам уеб сървъра като променлива.
От чата научихме, че командният ред показва грешката според очакванията, но не го прави по изящен начин:грешката е изведена и скриптът е спрян. Това е сериозен срив, който не се дължи на уеб сървъра.
С въвеждането на \Throwable
, сценариите, при които PHP умира трудно, стават все по-малко и все по-отдалечени. И така, в опит да поемем дишането на PHP, внедрихме register_shutdown_function
който изтегли error_get_last
в опит да разбера какво е било казано точно преди взривяването, ако изобщо има нещо.
Това разкри накратко съобщението за грешка в браузъра (този път използвайки различен браузър). Това обаче не беше повторимо. Прозрението в този момент беше кеширане:composer dump-autoload
коригира проблема!
Подозирам, че се е случило следното:
Eloquent
хвърли изключение- PHP пускаше това чрез класовете за обработка на изключения на Laravel
- В някакъв момент PHP се опита да зареди клас, който не беше в автоматичното зареждане
- PHP се срина тежко (това е един от случаите, при които PHP 7.0 се спасява)
Чрез стартиране на composer dump-autoload
, всички „липсващи“ класове бяха включени в обсега на автоматичното зареждане и при нов опит се получи правилната кодова последователност.