2017-12-02 35 views
-2

抛出简单的异常是一种常见的做法,所以我认为它会被内置到'Symfony2'中,但是,执行下面的代码,我会在这个问题的标题中看到部分错误下面尽显。Symfony2 - 正在尝试从名称空间“AppBundle Controller”加载类“Exception”。

if(($result === FALSE) || ($result !== 1)) { 

    throw new Exception('update user account data function -- ' . 
          'update return value: ' . $result . ' - ' . 
          'unable to update your account!'); 

    } // if(($result === FALSE) || ($result !== 1)) ... 

此错误告诉我,新的异常类不被支持的Symfony2除非我也把它添加到我的控制器的使用范围,但我不知道要加上的值有使用PHP的这个功能。

有人请告诉我应该在我的中使用区?

在我的代码,基于在https://www.w3schools.com/php/php_exception.asp在w3School的PHP异常页所示的实施例中,$导致变量由学说DBAL 更新方法(http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#update),它返回更新的行或数设置如果出现错误,则返回FALSE。

我知道,在我的代码更新方法工作,因为大部分时间$结果被指定一个非零返回值,没有出现异常,但有时$结果被分配了一个0,仍没有例外,表示已知存在的行实际上未被更新。

有什么方法可以知道更新失败的原因吗?

在这种情况下,我尝试使用上面的代码抛出异常,但随后的Symfony2显示以下内容:

已尝试从名称空间“的appbundle \控制器”加载类“异常”。 您是否忘记了“使用”声明“Symfony \ Component \ Security \ Acl \ Exception \ Exception”,“Symfony \ Component \ Serializer \ Exception \ Exception”或“Symfony \ Component \ Config \ Definition \ Exception \ Exception”? 500内部服务器错误 - ClassNotFoundException的

    在SRC /的appbundle /控制器/ BreakinOutAdminController.php在行


1358. 1359. if(($result === FALSE) || ($result !== self::ONE_ROW)) { 1360. 1361. throw new Exception('update user account data function -- ' . 1362. 'update return value: ' . $result . ' - ' . 1363. 'unable to update your account!'); 1364.

1361线在页面Symphony2 didplays突出。

所以两个问题:

我应该把我的使用区什么,所以我可以抛出一个异常,用我自己的消息?

有什么方法可以知道更新失败的原因吗?

谢谢。

+0

考虑使用IDE。在学习php命名空间的基础知识时,它将为您节省大量的麻烦。无论如何:抛出新的\ Exception('Oh'); PS该错误信息与Symfony无关。 – Cerad

+0

谢谢!添加斜杠修复了Exption('自定义文本')问题。 –

+0

但是,我仍然得到了导致我的代码抛出正在工作的异常的条件,** $ result = 0 **。我已经验证该行确实存在,并且不应该有任何锁定。有没有办法知道为什么** update **方法返回0? –

回答

0

Attempted to load class "Exception" from (the current) namespace是我经常做的一个问题。这不是Symfony问题 - 只是关于默认命名空间。

...new Exception(或SplExceptions,或其他任何东西 - DateTime是另一种常见的人看到了同样的问题)只是意味着从目前的命名空间中获取类,除非它是专门从use列表中引用的 - 但Exception,或DateTime,或其他人在根名称空间 - \Exception。您可以在每个文件中使用use以使别名在本地使用,或者预置\ backslash。良好的单元测试运行所有的代码,当涉及到这种情况时会中断 - 或静态代码分析(如phpstan)可以帮助您避免生产错误,因为这些类不存在于当前可用的名称空间中脚本。

+0

感谢您的详细解答。我想知道为什么你提到的事情也是失败的。我的关于Symfony2不支持Exception类的评论显然是因为我没有理解需要使用\ Exception。您似乎表示有一个类名可以添加到控制器的使用区域中,甚至可以添加到全局使用配置文件中。什么是类名,全局使用配置文件的位置和文件名是什么(如果有的话)?谢谢!顺便问一下,为什么这个问题被拒绝投票?我相信其他人可能会对这两个答案有帮助。 –

+0

**这不是symfony问题**,也没有神奇的Symfony修复 - 这是一个PHP命名空间问题。可以在文件顶部(或DateTime,或其他)使用Exception;或者预先使用带有根名称空间 - “\”的顶级类。 –

相关问题