2016-09-19 1 views
0

У меня есть расширение и когда я называю это расширение с идентификатором записи, которая не или больше не существует, я получаю исключение Object of type My\Model\... with identity "1035" not found.Extbase не найдено исключение перенаправлять 404 страница по умолчанию

На странице сам получил статус заголовка 500.

Что я хотел бы сделать в этом случае, это показать страницу по умолчанию 404. Это возможно? И как я могу это сделать?

ответ

1

Я думаю, вы используете метод, как

public function detailAction(\YourVendor\Ext\Domain\Model\MyModel $model) 

В этом случае, это не так просто, потому что исключение уже выброшено в ядре Extbase в. Вы можете посмотреть, как я могу решить это для моего news extension:

/** 
    * @param RequestInterface $request 
    * @param ResponseInterface $response 
    * @throws \Exception 
    */ 
    public function processRequest(RequestInterface $request, ResponseInterface $response) 
    { 
     try { 
      parent::processRequest($request, $response); 
     } catch (\Exception $exception) { 
      $this->handleKnownExceptionsElseThrowAgain($exception); 
     } 
    } 
    /** 
    * @param \Exception $exception 
    * @throws \Exception 
    */ 
    private function handleKnownExceptionsElseThrowAgain(\Exception $exception) 
    { 
     $previousException = $exception->getPrevious(); 
     if (
      $this->actionMethodName === 'detailAction' 
      && $previousException instanceof \TYPO3\CMS\Extbase\Property\Exception 
      && isset($this->settings['detail']['errorHandling']) 
     ) { 
      $this->handleNoNewsFoundError($this->settings['detail']['errorHandling']); 
     } else { 
      throw $exception; 
     } 
    } 

В методе handleNoNewsFoundError вы можете сделать то, что вы хотите, например, звонки $GLOBALS['TSFE']->pageNotFoundAndExit('No news entry found.');.

+1

Я использую по умолчанию 'showAction', созданный с помощью расширения-построителя. Ваши решения работают отлично. Для других: вы должны объявить пространство имен или использовать полный путь в функции processRequest functionvariables. – nbar

0

Невеста, но из логического POV вы должны просто поймать исключение, а затем позволить своему контроллеру решить, что делать (в вашем случае: показать страницу 404).