我使用带有新闻扩展9.1.1 的TYPO3 10.4.23版本
我在我的扩展中注入NewsRepository,以获得具有以下(简化(代码的新闻标题:
class MytestController extends TYPO3CMSExtbaseMvcControllerActionController {
protected $newsRepository;
public function injectNewsRepository(GeorgRingerNewsDomainRepositoryNewsRepository $newsRepository) {
$this->newsRepository = $newsRepository;
}
public function listAction() {
$newsUid = 1234;
$news = $this->newsRepository->findByUid($newsUid);
$title = $news->getTitle();
}
}
当$newsUid是现有ID时,这种方法很好。但如果数据库中不存在$newsUid,则会引发异常:
异常处理程序(WEB(:未捕获的TYPO3异常:GeorgeRinger\News\Domain\Repository\NewsRepository::findByUid((的返回值必须是GeorgeRinger\ News\Domain\Model\News的实例,返回null | TypeError在文件/www/type3conf/ext/News/Classes/Domain/Restore/NewsRepository.php的第355行中抛出。
不幸的是,我无法捕捉到此异常,因为它发生在新闻扩展中。
https://github.com/georgringer/news/blob/76c09fca1f57d37585f0d8286c002e155c0746e5/Classes/Domain/Repository/NewsRepository.php#L355
我有什么可能在我的扩展中发现这个错误?
由于返回类型需要为null,因此您实际上无能为力。现在通过改变实现了这一点https://github.com/georgringer/news/commit/ca58c4f13fc7f21cf89d2d52ad9ecd4ac625e9d8
只需使用try-catch块,就可以捕获扩展。无论如何,您的代码的其余部分在这种情况下都没有意义。https://www.php.net/manual/en/language.exceptions.php