TYPO3 extbase create url in repository (not controller)
TYPO3 extbase create url in repository (not controller)
关于如何在像这样的控制器中创建 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):需要构建URIs的实例是UriBuilder
class。没有什么可以阻止您将控制器的 UriBuilder
实例简单地传递到存储库中,例如作为参数:
public function fooAction() {
$records = $this->myRepository->findRecordsWithUri($this->uriBuilder);
}
在您的存储库函数中,然后只需使用传递的 UriBuilder
实例,就像在控制器中一样。
关于如何在像这样的控制器中创建 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):需要构建URIs的实例是UriBuilder
class。没有什么可以阻止您将控制器的 UriBuilder
实例简单地传递到存储库中,例如作为参数:
public function fooAction() {
$records = $this->myRepository->findRecordsWithUri($this->uriBuilder);
}
在您的存储库函数中,然后只需使用传递的 UriBuilder
实例,就像在控制器中一样。