2014-09-09 2 views
2

Я следующие действия контроллераZF2 контроллер Specific 404 Ошибки Page

class TitleController extends AbstractActionController { 

    public function showAllTitleAction() { 
     //Here I've some service that fetch entries from db 
     $data = $this->getData(); 


     if (count($data) == 0) { 
      //If data is empty, get 404 code for SEO reasons. 
      $this->getResponse()->setStatusCode(404); 
     } 

     //Although data is empty, go on creating the specific view for this controller 
     $viewModel = new ViewModel($data); 
     $viewModel->setTemplate('application/title/template'); 
     return $viewModel; 
    } 
} 

Когда я даю 404 ошибки в контроллере, мой запрос перехватывается и я получаю страницу ошибки по умолчанию 404. Но я просто хочу изменить код состояния HTTP, а не контент. (Я покажу дружеское сообщение на выходе)

Как я могу предотвратить перехват моего запроса по странице 404 по умолчанию?

Спасибо.

ответ

0

я в конечном итоге проверки на бутстраповской событие, которое запрашивается контроллер и, если необходимо, отделяя notfoundstrategy.

Здесь вы можете найти мое решение этой проблемы: http://www.cagataygurturk.com/zf2-controller-specific-not-found-page/

+0

Спасибо, я отредактировал ответ –

+0

Благодарим за редактирование :-) – kleopatra

0

Ну, я не могу понять, почему вы хотите, что (если это 404, то есть не должно быть никакого контента для отображения), но ради аргумента, я полагаю, вы могли бы:

  1. зарегистрировать прослушиватель для события EVENT_DISPATCH_ERROR до дефолта RouteNotFoundStrategy,
  2. распространения события остановки в этом слушателе и вернуть то, что вы хотите (см ссылки ржали)

вы также могли бы пойти вниз маршрут:

  1. бросает исключение вместо того, чтобы изменить код состояния,
  2. установки приемника для исключения выброшен из контроллеров,
  3. проверки экземпляра объекта исключения (сказать это отдельно от всех «неожиданных» исключений),
  4. установка кода состояния в этом слушателе, возможно короткое замыкание цикла события.

Надеюсь, что вы попадете на правильный путь.

Для справки смотрите:

+0

для пользователя контент, который больше не доступен (удален или СТГ), это рекомендуется, чтобы дать ошибку 404 для целей SEO. В stackoverflow также, когда вы удаляете вопрос, эта страница дает 404. Содержимое, которое я покажу, это другие рекомендации, основанные на искомой странице. (возможно, это «вы имели в виду это?») –

+0

Так что, может быть, вы можете просто изменить страницу 404 для своего приложения? Или добавьте к нему некоторую логику, чтобы отобразить такие вещи. – guessimtoolate

+0

Это будет анти-шаблон, я хочу контролировать эту вещь в контроллере. –