クリーンなエラー メッセージを返すことができるように、register_shutdown_function で PHP の致命的なエラーを「キャッチ」しようとしています。
単純な PHP ファイルでは、以下の両方のテスト ケースが正しく処理され、カスタム 500 エラーが返されます。
register_shutdown_function('handleShutdown');
//Test Case #1
$nullVar = null;
$nullVar->test();
//Test case #2
$uninitialisedVar->test();
function handleShutdown()
{
$error = error_get_last();
if ($error !== NULL)
{
ob_clean();
header('HTTP/1.0 500 Internal Server Error');
echo 'Something bad happened';
}
}
ただし、コントローラー内の Symfony 2 アクション内から同じメカニズムを使用する場合、テスト ケース #2 は処理されなくなります。私のハンドラーは、変数が以前に初期化された場合にのみ呼び出されます。ただし、どちらの場合も、同じ種類の致命的なエラー (非オブジェクトのメンバー メソッドの呼び出し) を処理しています。
誰か助けてくれませんか?