2

我使用 DoctrineORMModule(https://github.com/doctrine/DoctrineORMModule,通过 Composer 安装)和 ZF2 来开发 Web 应用程序。

我的问题是,我没有从教义中得到例外,只有“内部 500”错误。即使

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

我没有看到错误,只是“内部 500”消息(我也在 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”错误,但我猜教义应该会引发错误。

我用谷歌搜索了几个小时,但我不知道这是默认行为,还是您必须配置教义ORMModule 来记录/抛出异常。如果有人能给我一个关于如何获得异常的提示,我将非常感激,因为这让我非常慢下来。

编辑:我可以使用persist() 和flush(),执行数据库查询,一切正常。只是如果我在实体中犯了错误并想要坚持或刷新它们,我不会得到异常。如果我在persist()之前回显某些内容,则未显示“内部500”,但数据库未更新或任何内容。

Edit2:上面示例中的错误是错误的“mappedBy”-entry 和/或错误的命名设置器。仍然没有例外:)

4

1 回答 1

1

这与教义无关。可以在您使用的任何库中引发异常。要知道,一般情况下,当你不捕获异常时,php会因为未捕获的异常而产生致命错误。我认为您在设置display_errors/时犯了一个错误,error_reporting()因为那应该显示 php 错误。

此外,Zend Framework 有一个异常处理程序来捕获运行部分中的异常。如果你在你的动作控制器中有这个代码,Zend\Mvc你会看到一个很好的错误页面。该框架会在很多地方捕获错误,但是如果您将这段代码没有任何catch内容,则不会被捕获。

于 2013-01-22T10:08:46.070 回答