TYPO3 Extbase - перенаправление на pid

$GLOBALS['TSFE']->pageNotFoundAndExit('');

в настоящее время используется, но вместо этого я хотел бы перенаправить на идентификатор страницы.

С помощью команды redirectToUri я не мог найти решения или не работал.

Код:

/**
* initialize action show
* @return void
*/
public function initializeShowAction() {
  if ($this->request->hasArgument('xxx')) {
    if ( $xxx=$this->xxxRepository->findByUid(
      intval($this->request->getArgument('xxx'))
    ) ) {
      $this->request->setArgument('xxx',$xxx);
      return;
    }
  }

$GLOBALS['TSFE']->pageNotFoundAndExit('');

}

person Stigi    schedule 11.11.2016    source источник


Ответы (5)


Вы можете создать uri с помощью следующего кода в вашем контроллере:

$uriBuilder = $this->uriBuilder;
$uri = $uriBuilder
  ->setTargetPageUid($pageUid)
  ->build();
$this->redirectToUri($uri, 0, 404);
person René Pflamm    schedule 11.11.2016
comment
Я думаю, что лучше использовать прямой $ this- ›uriBuilder, если вы находитесь в контроллере, например: $uri = $this->uriBuilder ->setTargetPageUid($pageUid) ->build(); Я не вижу причин для инициализации переменной $ uriBuilder - person patryno; 11.01.2019

В вашем контроллере вы можете использовать одно из следующих:

# Internal redirect of request to another controller
$this->forward($actionName, $controllerName, $extensionName, array $arguments);

# External HTTP redirect to another controller
$this->redirect($actionName, $controllerName, $extensionName, array $arguments, $pageUid, $delay = 0, $statusCode = 303);

# Redirect to URI
$this->redirectToURI($uri, $delay=0, $statusCode=303);

# Send HTTP status code
$this->throwStatus($statusCode, $statusMessage, $content);
person jokumer    schedule 11.11.2016

Спасибо всем. Мое решение сейчас:

$pageUid = $this->settings['myflexformsettingpart'];
$uriBuilder = $this->uriBuilder;
$uri = $uriBuilder
  ->setTargetPageUid($pageUid)
  ->build();
$this->redirectToURI($uri, $delay=0, $statusCode=303);
person Stigi    schedule 14.11.2016

Я использую это так:

$GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFound_handling'] = '/my/404/';

обратите внимание, что я использую URL-адрес, который генерирует realURL.

person nbar    schedule 11.11.2016
comment
Я бы хотел перенаправить на совершенно другую страницу по PID. Например, на главной странице (ID 1) - person Stigi; 11.11.2016
comment
Вы также можете использовать $GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFound_handling'] = 'index.php?id=999';, где 999 - это PID. Но я не уверен, изменит ли realURL этот URL. Поэтому я предлагаю использовать URL-адрес, который realURL генерирует для вашего completely different page. Для вашей домашней страницы (предполагается, что она называется домашней) просто используйте /home/ вместо /my/404/ - person nbar; 11.11.2016

Вы также можете использовать функцию перенаправления вашего контроллера. Нравиться:

    if(!$pageUid = intval($this->settings['resultPageUid']))
    {
        $pageUid = $GLOBALS['TSFE']->id;
    }
    $this->redirect(null, null, null, null, $pageUid);

Поэтому, если в ваших настройках не найден uid страницы для перенаправления или найденный uid не является целым числом, он будет перенаправлен на текущий uid страницы.

Функция перенаправления позволяет еще 2 параметра:

  • задержка, целое число, по умолчанию 0
  • statusCode, int, по умолчанию 303
person mogensf    schedule 11.07.2020