如何捕获异常:findByUid() 必须是 News 的实例,返回 null
How to catch exception: findByUid() must be an instance of News, null returned
我使用 TYPO3 版本 10.4.23 和新闻扩展 9.1.1
我在我的扩展中注入 NewsRepository 以使用以下(简化的)代码获得 news-title:
class MytestController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
protected $newsRepository;
public function injectNewsRepository(\GeorgRinger\News\Domain\Repository\NewsRepository $newsRepository) {
$this->newsRepository = $newsRepository;
}
public function listAction() {
$newsUid = 1234;
$news = $this->newsRepository->findByUid($newsUid);
$title = $news->getTitle();
}
}
当 $newsUid 是现有 ID 时,这可以正常工作。但如果数据库中不存在 $newsUid,则会抛出异常:
Exception handler (WEB): Uncaught TYPO3 Exception: Return value of GeorgRinger\News\Domain\Repository\NewsRepository::findByUid() must be an instance of GeorgRinger\News\Domain\Model\News, null returned | TypeError thrown in file /www/typo3conf/ext/news/Classes/Domain/Repository/NewsRepository.php in line 355.
不幸的是我无法捕捉到这个异常,因为它发生在新闻扩展中。
我有什么可能在我的扩展程序中发现这个错误?
只需使用 try-catch 块,然后您就可以捕获扩展名。在这种情况下,您的其余代码无论如何都没有意义。 https://www.php.net/manual/en/language.exceptions.php
您无能为力,因为 return 类型需要可以为空。这是现在通过更改 https://github.com/georgringer/news/commit/ca58c4f13fc7f21cf89d2d52ad9ecd4ac625e9d8
实现的
我使用 TYPO3 版本 10.4.23 和新闻扩展 9.1.1
我在我的扩展中注入 NewsRepository 以使用以下(简化的)代码获得 news-title:
class MytestController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
protected $newsRepository;
public function injectNewsRepository(\GeorgRinger\News\Domain\Repository\NewsRepository $newsRepository) {
$this->newsRepository = $newsRepository;
}
public function listAction() {
$newsUid = 1234;
$news = $this->newsRepository->findByUid($newsUid);
$title = $news->getTitle();
}
}
当 $newsUid 是现有 ID 时,这可以正常工作。但如果数据库中不存在 $newsUid,则会抛出异常:
Exception handler (WEB): Uncaught TYPO3 Exception: Return value of GeorgRinger\News\Domain\Repository\NewsRepository::findByUid() must be an instance of GeorgRinger\News\Domain\Model\News, null returned | TypeError thrown in file /www/typo3conf/ext/news/Classes/Domain/Repository/NewsRepository.php in line 355.
不幸的是我无法捕捉到这个异常,因为它发生在新闻扩展中。
我有什么可能在我的扩展程序中发现这个错误?
只需使用 try-catch 块,然后您就可以捕获扩展名。在这种情况下,您的其余代码无论如何都没有意义。 https://www.php.net/manual/en/language.exceptions.php
您无能为力,因为 return 类型需要可以为空。这是现在通过更改 https://github.com/georgringer/news/commit/ca58c4f13fc7f21cf89d2d52ad9ecd4ac625e9d8
实现的