TYPO3 extbase在存储库(而非控制器)中创建URL

时间:2015-05-07 22:50:09

标签: typo3 extbase

有很好的教程如何在像这样的控制器中创建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在从存储库完成时在非对象上调用。

有关如何过去的任何线索?

1 个答案:

答案 0 :(得分:2)

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

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

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

在您的存储库函数中,只需使用传递的UriBuilder实例,就像在控制器中一样。

相关问题