TYPO3 extbase在存储库(不是控制器)中创建URL

蒂贝克

关于如何在像这样的控制器中创建URL的很好的教程。例如:

$this->uriBuilder->reset()->setTargetPageUid($page_uid)->setCreateAbsoluteUri(TRUE)->build();
$this->controllerContext->getUriBuilder()->reset()->setTargetPageUid($page_uid)->setArguments(array('person'=>$person->getUid())->buildFrontendUri();

在控制器中工作。但是我无法在存储库中执行相同的工作。错误日志说从存储库中完成后,在非对象上调用了第一个示例中的reset()和第二个示例中的getUriBuilder。

关于如何克服这一点的任何线索?

赫尔姆伯特

首先,您不应该这样做为了在Extbase中创建URI,您需要访问当前的控制器上下文,因为创建URI涉及多个因素(当前称为控制器操作,当前主机名,所选语言等)。如果要在存储库(即数据访问层)中创建URI,则会生成对Extbase框架的HTTP路由层的依赖关系。从体系结构的角度来看,这是不希望的,因为可以认为它违反了关注点分离并造成了混乱的交叉依赖。

话虽如此,如果您仍然想这样做(而不是在控制器中生成URI,或者更好的是使用Fluid viewhelper生成):构建URI所需要的只是UriBuilder该类的一个实例没有什么阻止您将控制器的UriBuilder实例简单地传递到存储库中的,例如作为参数:

public function fooAction() {
    $records = $this->myRepository->findRecordsWithUri($this->uriBuilder);
}

在存储库功能内,然后只需使用传递的UriBuilder实例即可,就像在控制器中一样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章