Кстати, а если вместо die/exit код кидает HaltExecption, который уже в глобальном хандлере исключений заменяется на exit/die это совсем плохо или нормальное решение?
Нормально, ящитаю. Собстно, замени HaltException на RuntimeException и будет точно так, как работают всякие ларавелы.