php - 如何在 Symfony v2.8/PHP v5.6 中抛出 InvalidArgumentException 内置异常
问题描述
这个问题得到了回答,但它提出了一个关于如何捕获 InvalidArgumentException 的问题,我在更新部分添加了这个问题。
***原始问题***
我正在使用 Symfony v2.8 和 PHP v5.6,当 $id 参数没有整数值时,我想在函数中抛出 InvalidArgumentException 异常,包含以下代码:
function vote( $id ) {
if( !is_integer( $id ) )
throw new InvalidArgumentException( 'An invalid argument was specified ...' );
else ...
// Add a vote to the record specified by the $id parameter ...
⫶
}
在我的代码中,实际的消息会更有意义
与 PHP 手册中显示此throw-exception的示例不同,当我加载导致上述代码在我的服务器上执行的页面时,Symfony 会输出以下错误:
Attempted to load class "InvalidArgumentException" from namespace
"AppBundle\Controller".
Did you forget a "use" statement for e.g.
"Doctrine\DBAL\Exception\InvalidArgumentException",
"Symfony\Component\Serializer\Exception\InvalidArgumentException",
"Symfony\Component\Intl\Exception\InvalidArgumentException",
"Symfony\Component\Form\Exception\InvalidArgumentException",
"Symfony\Component\PropertyAccess\Exception\InvalidArgumentException",
"Symfony\Component\Process\Exception\InvalidArgumentException",
"Symfony\Component\Asset\Exception\InvalidArgumentException",
"Symfony\Component\OptionsResolver\Exception\InvalidArgumentException",
"Symfony\Component\Console\Exception\InvalidArgumentException",
"Symfony\Component\Security\Core\Exception\InvalidArgumentException",
"Symfony\Component\Validator\Exception\InvalidArgumentException",
"Symfony\Component\DependencyInjection\Exception\InvalidArgumentException",
"Psr\Log\InvalidArgumentException",
"Doctrine\Instantiator\Exception\InvalidArgumentException" or
"Doctrine\Common\Proxy\Exception\InvalidArgumentException"?
500 Internal Server Error - ClassNotFoundException
我可以将所有这些组件添加到我的班级的 USE 列表中,这可能会起作用,但这似乎有点过头了,因为大多数(如果不是全部)似乎不适用于我正在检查 $id 参数的上下文,但是在查看了每个建议的组件之后,我看不到任何似乎适用于为非整数类型的函数的 $id 参数创建通用函数参数陷阱的内容。我查看了 Symfony 站点的文档以使用此异常,并试图找到一个“适合”我预期用途的组件,但找不到任何适用的组件。
请在他们的 Symfony 代码中使用此异常的人告诉我建议的组件列表中的哪些组件或我应该添加到我的代码中的其他组件,以便它可以正确地抛出 InvalidArgumentException 异常?
*** 更新 ***
我目前正在捕获数据库尝试插入重复行错误,如下所示:
catch( \Exception $e ) {
if( get_class( $e ) ===
'Doctrine\DBAL\Exception\UniqueConstraintViolationException' ) {
if( $command === 'vote' )
return 'You may only vote once on an Artist\'s ' .
( ( $media === 'Songs' ) ? 'song' : 'video' ) . '.';
else
return '';
// End of if( $command === 'vote' ) ...
}
else
throw $e; // Re-Throw all other exceptions.
// End of if( get_class( $e ) !==
// 'Doctrine\...\UniqueConstraintViolationException' ) ...
// else ...
} // End of try ... catch( \Exception $e ) ...
在 Unique Constraint Violation Exception 的情况下,我使用 'Doctrine\DBAL\Exception\UniqueConstraintViolationException' 类名字符串查找它,但在 USE 语句中,我使用了 Doctrine\DBAL\DBALException,但两者不同。
*** 更新 ***
我目前不想处理 InvalidArgumentException,但如果我这样做了,是否有它的类名?这个异常没有对应的USE语句,所以找了一个也没找到。
更广泛地说,您如何确定要捕获的每个异常使用哪些类名?Symfony 异常处理是否有这样的列表?
谢谢
解决方案
推荐阅读
- reactjs - 下拉菜单隐藏在 React 的导航栏下
- java - 对数据库的外部更改未传播到实体 spring boot jpa
- python - 我正在使用 Python,但我不断收到这样的分段错误
- ethereum - 结构坚固
- flutter - Flutter web:如何通过代码关闭我的应用程序?
- iis - 如何创建一个从数据库中提取单行的简单 ASP 网站?
- html - 如何在侧边栏旁边放置多个容器元素?
- python - 数据框列表 Pandas
- javascript - 交换脚本时如何从按钮中删除所有事件侦听器?
- android - 使用 Google 地图导航时显示信息的免提应用程序