如何在Symfony v2.8/PHP v5.6中引发InvalidArgumentException内置异常

如何在Symfony v2.8/PHP v5.6中引发InvalidArgumentException内置异常,php,exception,throw,symfony-2.8,invalid-argument,Php,Exception,Throw,Symfony 2.8,Invalid Argument,这个问题得到了回答,但它提出了一个关于如何捕获InvalidArgumentException的问题,我在更新部分中添加了这个问题 ***原始问题*** 我使用的是Symfony v2.8和PHP v5.6,当$id参数没有整数值时,我想在函数中抛出InvalidArgumentException异常,包含以下代码: function vote( $id ) { if( !is_integer( $id ) ) throw new InvalidArgumentExcept

这个问题得到了回答,但它提出了一个关于如何捕获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手册中显示的示例不同,当我加载导致上述代码在我的服务器上执行的页面时,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
我可以将所有这些组件添加到我的类的使用列表中,这可能会起作用,但这似乎有些过分,因为大多数(如果不是全部的话)似乎不适用于我检查$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 ) ...
在唯一约束冲突异常的情况下,我使用'doctor\DBAL\Exception\UniqueConstraintViolationException'类名字符串查找它,但在USE语句中,我使用了USE-doctor\DBAL\DBALException,但两者不同

***更新***

我目前不想处理InvalidArgumentException,但如果我处理了,是否有它的类名?这个异常没有相应的USE语句,所以我在搜索时没有找到一个

更广泛地说,如何确定要捕获的每个异常使用的类名?是否有这样的Symfony异常处理列表


非常感谢将\InvalidArgumentException()与开始斜杠一起使用。非常感谢!提交此问题后,我继续搜索Symfony Use InvalideArgumentException,但没有找到解决方案。我在代码中重新键入了“thow new”,我的编辑器(支持智能代码完成)提供了一个它“知道”的异常列表。这是一个我不知道的特性!我一直在寻找一个异常列表,我可以在各种抛出新的情况下使用,但从未找到一个。不管怎样,我选择了你建议的一个,它不需要在我的使用列表中添加组件就可以工作。太好了-再次感谢。我完成了我的回答(昨天,我在打电话,StackOverflow在电话上不容易:p)。这是一个名称空间问题。在文件的一开始,您就有一个
名称空间AppBundle\Controller
,因此这意味着您将来将使用的所有类都必须在src/AppBundle/Controller目录中搜索。因此,当您调用
InvalidArgumentException
时,它尝试在此目录中搜索它,但失败了,这就是错误所说的。当使用前缀“`时,这意味着它将在代码的“根”处搜索附加信息,即PHP nativeThanks,因此在InvalidArgumentException()之前放一个斜杠,告诉编译器InvalidArgumentException不在AppBundle\Controller中,而是在“根”中,对吗?我已经用一个关于捕获此异常的问题更新了我的问题。如果你不介意,请看一下更新。谢谢