В рамках веб-MVC, кто несет ответственность за показ 404 страницы? - PullRequest
3 голосов
/ 10 апреля 2011

В веб-модели MVC, какой класс / объект имеет ответственность / функцию для вызова страницы 404?Почему он несет ответственность?Я думаю, что это маршрутизатор, но я спрашиваю на всякий случай.

$router->show_404("Unable to find controller.");

Кроме того, страница 404 должна быть представлением или просто шаблоном?Какова стандартная практика здесь?

- Обновление делает вещи более понятными -

Если, например, мы согласны, что класс Router содержит функцию / ответственность для вызова страницы 404Должны ли мы затем внедрить Router объект в контроллер, который мы создали, чтобы каждый контроллер мог использовать объект Router для вызова 404s?Или я должен создать собственный класс, созданный для отображения «специальных страниц», таких как Error / 404s?

Спасибо за ответ.

Ответы [ 3 ]

2 голосов
/ 10 апреля 2011

Я предпочитаю что-то подобное в "драйвере":

try
{
  $router->handleRequest($request);
}
catch (Exception $e)
{
  $view = new View('error');
  echo $view;
}

A 404 - это еще одно исключение, обработанное блоком catch. У вас всегда может быть конкретное исключение 404, если вы хотите сделать что-то особенное с ним. Или вы можете иметь общее «исключение http», которое включает в себя код состояния, который будет указывать, какой шаблон использовать.

2 голосов
/ 10 апреля 2011

Зависит от ситуации.

Если это связано с неверным маршрутом, то он может быть обработан самим маршрутизатором или может иметь маршрут по умолчанию, который указывает на обработчик 404.

Если это из-за того, что действительный маршрут принимает недопустимые данные (/user/JohnDoe, но Джон Доу не известен системе), обработчик 404 должен будет инициировать этот маршрут.

После запуска 404 я предпочитаю легкие, быстрые страницы, сообщающие об этом, но есть множество сайтов, которые, например, будут выполнять поиск с приблизительным соответствием и возвращать список «Вы имели в виду одну из этих вещей?"Я не уверен, каким образом я бы назвал «стандартную практику» в любом случае, если вы не говорите об API-интерфейсах REST, которые обычно посылают минимальный ответ, поскольку они нацелены на машиночитаемость, поэтому не так уж многосмысл задавать вопрос, на который может ответить только человек.

0 голосов
/ 10 апреля 2011

Ответственность за сообщение об ошибке несет View.И код представления должен быть разработан соответственно, чтобы сообщать о значимых сообщениях об ошибках

<web-app ...> 

  <error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/pages/404_error.jsp</location>
  </error-page>

</web-app>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...