TYPO3 9.5 Extbase Как перенаправить вызов showAction с недействительным объектом на пользовательскую страницу (не 404!) - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу перенаправить вызов showAction с недействительным uid на пользовательскую страницу. Как я могу сделать это с TYPO3 9, когда активна маршрутизация и обработка 404? В данный момент я всегда заканчиваю на 404, потому что страница не найдена ..

Где я должен атаковать?

проверка настроек плагина, таких как throwPageNotFoundExceptionIfActionCantBeResolved? игнорировать проверку параметров? перезаписать errorAction или callActionMethod? написать собственную глобальную обработку 404? переписать маршрутизацию?

маршрутизация + конфигурация обработки ошибок:

...
    type: Extbase
    extension: ext
    plugin: Pi1
    routes:
      -
        routePath: '/{object}'
        _controller: 'object::show'
        _arguments:
          object: object
    defaultController: 'object::list'
    defaults:
      page: '0'
    requirements:
      object: '^[0-9].*$'
      page: \d+
    aspects:
      object:
        type: PersistedAliasMapper
        tableName: tx_ext_domain_model_object
        routeFieldName: uid
      page:
        type: StaticRangeMapper
        start: '1'
        end: '100'
...

errorHandling:
  -
    errorCode: '404'
    errorHandler: Page
    errorContentSource: 't3://page?uid=174'

1 Ответ

0 голосов
/ 13 ноября 2019

Хорошо, лучший способ - переписать TYPO3-Обработка ошибок.

config.yaml

errorHandling:
-
  errorCode: '404'
  errorHandler: PHP
  errorPhpClassFQCN: My\secret\namespace\Error\ErrorHandling

ErrorHandling.php

namespace My\secret\namespace\Error;


use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Core\Error\PageErrorHandler\PageErrorHandlerInterface;
use TYPO3\CMS\Core\Http\RedirectResponse;

class ErrorHandling implements PageErrorHandlerInterface{

/**
 * @param ServerRequestInterface $request
 * @param string $message
 * @param array $reasons
 * @return ResponseInterface
 */
public function handlePageError(ServerRequestInterface $request, string $message, array $reasons = []): ResponseInterface{

    if (strpos($request->getRequestTarget(), '/page-where-i-want-my-special-404') !== false) {
        return new RedirectResponse('/my-custom-404', 404);
    }

    return new RedirectResponse('/404', 404);
    }
}
...