2

DoctrineORMModule(https://github.com/doctrine/DoctrineORMModule、Composer経由でインストール)とZF2を使用してWebアプリケーションを開発しています。

私の問題は、教義から例外を受け取らず、「内部500」エラーだけを受け取ることです。でもで

ini_set('display_errors', 1); 
error_reporting(E_ALL);

エラーは表示されません。「Internal500」メッセージだけが表示されます(php.iniでもこれらの設定を適用しました)。「php_error_log」にもエントリはありません。

行をtry-catch-blockで囲むと、例外はキャッチされません。これは、flush()およびpersist()の呼び出し中に発生します。その他のPHP-エラーが表示されます。

例:

ini_set('display_errors', 1);
error_reporting(E_ALL);

$rel  = new \MyApp\Entity\UserRelationship();
$rel->relatingUser = $user;
$rel->relatedUser  = $friend;

try {
    $em->persist($rel);
} catch ( Exception $e ) {
    var_dump($e);
}

これにより「内部500」エラーが発生しますが、教義はエラーをスローするはずです。

私は何時間もグーグルで検索しましたが、これがデフォルトの動作であるかどうか、または例外をログに記録/スローするようにdoctrineORMModuleを構成する必要があるかどうかはわかりません。例外を取得する方法について誰かが私にヒントを与えることができれば、私は非常に感謝します。これは私を非常に遅くするからです。

編集:persist()とflush()を使用できます。データベースクエリが実行され、すべて問題ありません。エンティティに間違いを犯し、それらを永続化またはフラッシュしたい場合でも、例外は発生しません。persist()の前に何かをエコーし​​た場合、「Internal 500」は表示されませんが、データベースは更新されません。

Edit2:上記の例のエラーは、間違った「mappedBy」エントリおよび/または間違った名前のセッターでした。まだ例外はありません:)

4

1 に答える 1

1

これはDoctrineとは関係ありません。例外は、使用しているどのライブラリでもスローできます。一般に、例外をキャッチしない場合、php はキャッチされない例外のために致命的なエラーを作成することを知っておく必要があります。display_errors/を設定したときに間違いを犯したと思いますerror_reporting().phpエラーが表示されるはずです。

さらに、Zend Framework には、実行部分内で例外をキャッチするための例外ハンドラーがあります。アクション コントローラ内にこのコードがある場合、Zend\Mvc適切なエラー ページが表示されます。フレームワークは多くの場所でエラーをキャッチしますが、このコードを何もせずに配置すると、エラーはキャッチされcatchません。

于 2013-01-22T10:08:46.070 に答える