抛出简单的异常是一种常见的做法,所以我认为它是'内置'Symfony2,'开箱即用'。但是,执行下面的代码,我得到的错误部分显示在这个问题的标题中并在下面完整显示。
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不支持新的Exception类,除非我也将它添加到我的Controller的 use 区域,但是我不知道要添加它的值来使用它PHP的特色。
有人请告诉我在使用区域放什么?
在我的代码中,根据w3School的PHP例外页面https://www.w3schools.com/php/php_exception.asp中显示的示例, $ result 变量由Doctrine DBAL 更新设置方法(http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#update),返回更新的行数,如果有错误则返回FALSE。
我知道我的代码中的更新方法有效,因为大多数情况下 $ result 都会被赋予非零返回值并且不会发生异常,但有时< strong> $ result 被赋予0,仍然没有异常,表示已知存在的行实际上没有被更新。
有没有办法解决更新失败的原因?
在这种情况下,我尝试使用上面的代码抛出一个异常,但是Symfony2会显示以下内容:
尝试从命名空间“AppBundle \ Controller”加载类“Exception”。 您是否忘记了“使用”声明,例如“Symfony \ Component \ Security \ Acl \ Exception \ Exception”,“Symfony \ Component \ Serializer \ Exception \ Exception”或“Symfony \ Component \ Config \ Definition \ Exception \ Exception”? 500内部服务器错误 - ClassNotFoundException
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 :(得分:1)
Attempted to load class "Exception" from (the current) namespace
是我经常犯的问题。这不是Symfony问题 - 只是关于默认命名空间。
...new Exception
(或SplExceptions,或其他任何东西 - DateTime
是另一个经常看到相同问题的人)只是意味着从当前命名空间中获取类,除非它是从{{{ 1}} list - 但use
或Exception
或其他人位于根命名空间 - DateTime
中。您可以在每个文件中\Exception
使用别名,以便在本地使用,或者在\ backslash前添加。良好的单元测试运行所有代码并因此打破 - 或静态代码分析,如phpstan,可以帮助很多,以避免生成错误,其中这些类不存在于当前可用的名称空间中脚本。