每当我在代码中抛出异常而未在文档块中明确说明时,我都会收到警告:
我知道这可以通过添加
@throw
标签来修复,但警告实际上并不是 100% 正确,因为我确实处理了 /app/Exceptions/Handler.php
中的异常。我想禁用这个异常的警告。这在 PHPStan 中可能吗?我在文档中没有找到任何内容,但在这篇博文中https://phpstan.org/blog/bring-your-exceptions-under-control似乎可以有未经检查和检查的异常,而且我相信未经检查异常不需要声明。但是,在 phpstan.neon
中将我的异常标记为未选中并不能消除错误:
exceptions:
uncheckedExceptionClasses:
- 'app\Exceptions\AuthenticationException'
我还注意到
Symfony\Component\HttpKernel\Exception\NotFoundHttpException
异常不会触发警告。我不知道为什么,但似乎已经存在一组不需要 @throw
的例外情况。
如何抑制异常警告?
正如 Bob 正确指出的那样,这来自 PhpStorm 本身,而不是 PHPStan。
您可以将任何异常添加到未检查的异常列表中,这样它就会被 PhpStorm 忽略
Settings/Preferences | PHP | Analysis
https://www.jetbrains.com/help/phpstorm/php-missing-throws-tag-s.html
至于为什么
Symfony\Component\HttpKernel\Exception\NotFoundHttpException
没有被报道——他们有不同的父母:
NotFoundHttpException
扩展 HttpException
扩展 \RuntimeException
(位于未选中列表中)AuthenticationException
延伸\Exception
首先,这是 PhpStorm 提示,而不是 PHPStan。
docblock 中
@throw
的要点是向您展示您的方法可以抛出哪些异常。如果其他开发人员或您自己在其他地方重用该方法,PhpStorm 将立即提醒您该异常,并建议您将其包装在 try-catch 中或将其移至 docblock 以进行更高级别的处理。
所以我认为将此异常指向 @throw
没有问题。
有什么方法可以抑制针对特定于类的异常的警告吗?例如,如果 Doctrine 存储库方法使用
getOneOrNullResult
方法,该方法会生成 \Doctrine\ORM\NonUniqueResultException
,并且我知道它不会发生,因为我正在通过具有唯一索引的列搜索对象。比如:
/**
* @catch \Doctrine\ORM\NonUniqueResultException <-- Disable phpStorm warning "Unhandled \Doctrine\ORM\NonUniqueResultException"
*/
public function findUserBySomeUniqueAttr(string $uniqueAttr): ?User
{
return $this->_em->createQuery('Some query')
->setParameter('someAttr', $uniqueAttr)
->getOneOrNullResult();
}