TYPO3 扩展 - 如果未设置记录或不可用,则重定向到显示操作中的另一个页面

Phi*_*p M 2 typo3 extbase typo3-extensions typo3-8.x

当有人访问详情页面但没有记录或记录不可用时,如何重定向到另一个页面?

我有详细记录,例如

domain.com/abc/ABC1234
Run Code Online (Sandbox Code Playgroud)

当有人进来时

domain.com/abc/
Run Code Online (Sandbox Code Playgroud)

...我得到:

Uncaught TYPO3 Exception
#1298012500: Required argument "record" is not set for Vendor\Extension\Controller\ActionController->show. (More information)

TYPO3\CMS\Extbase\Mvc\Controller\Exception\RequiredArgumentMissingException thrown in file
/is/htdocs/www/typo3_src-8.7.11/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php in line 425. 
Run Code Online (Sandbox Code Playgroud)

...在这种情况下我希望它重定向到:

domain.com/other-page/
Run Code Online (Sandbox Code Playgroud)

...如果没有特定记录,我也需要它。
……怎么办呢?

/**
 * action show
 *
 * @param \Action $record
 * @return void
 */
public function showAction(Action $record) {

    $this->view->assign('record', $record);

}
Run Code Online (Sandbox Code Playgroud)

以下是一些示例TYPO3 Extbase - 重定向到 pid ...但不确定如何实现它

编辑:有效的是......

/**
 * action show
 *
 * @param \Action $record
 * @return void
 */
public function showAction(Action $record=null) {   

  if ($record === null) { 
    $pageUid = 75;
    $uriBuilder = $this->uriBuilder;
    $uri = $uriBuilder
      ->setTargetPageUid($pageUid)
      ->build();
    $this->redirectToUri($uri, 0, 404);
  } else {
    $this->view->assign('record', $record);

  }

}
Run Code Online (Sandbox Code Playgroud)

Ren*_*amm 5

该redirect方法需要一个操作和控制器参数。所以你的重定向代码是错误的。

$this->redirect($actionName, $controllerName = NULL, $extensionName = NULL, array $arguments = NULL, $pageUid = NULL, $delay = 0, $statusCode = 303); 
Run Code Online (Sandbox Code Playgroud)

要重定向到 PageUID,您需要使用 uriBuilder 和redirectToUri方法。请参阅此处的示例。