PHP MVC 404 / Обработка ошибок для плохих URL - PullRequest
2 голосов
/ 17 марта 2011

Я пытаюсь построить пользовательский MVC-фреймворк на PHP.Я только начинаю с этого MVC и фреймворка, и я не очень хорош.

Я создал все общие вещи.Библиотека для модели, контроллера и представления, и я получил общее приложение и работает.

Теперь я хотел бы включить обработку ошибок.В первую очередь на стороне пользователя для плохих URL.Я хочу сделать страницу не найдена или 404 ошибки.Поэтому мне нужен способ проверить плохие контроллеры, действия и строки запросов.А затем отправьте пользователей на страницу 404.

Каков наилучший способ сделать это в среде MVC?

РЕДАКТИРОВАТЬ

Это учебный проект, который не предназначен для производства.

Ответы [ 4 ]

3 голосов
/ 17 марта 2011

Прежде всего, не рекомендуется разрабатывать собственные фреймворки, если вы планируете их производство. Есть много замечательных фреймворков, которые вы можете использовать, с хорошей гибкостью и, что более важно, с большей производительностью.

Подходя к проблеме. Сначала напишите пользовательский обработчик исключений для управления 404. Я рекомендую вызывать их в вашем системном / базовом классе, где вы создаете Object контроллера и вызываете действие, если их не существует.

1 голос
/ 01 мая 2012

Добавьте обработчик ошибок в ваш загрузчик.

Например, у меня есть:

public function error(){        
         $this->view->msg = 'Page not found';      
         $this->view->render('error/index');       
}

Добавить проверку для метода в начальной загрузке.Где зависит от вашей структуры.Если метод или контроллер не найден, вызовите метод error ().

Это, наверное, самый простой способ.

0 голосов
/ 17 марта 2011

Что ж, если вы учитесь, как вы сказали, вы не должны использовать свою среду для производственного кода, потому что одна вещь ломает приложение дома, а другая теряет деньги с недовольными клиентами:)

Вернуться к проблеме. Я создал свой собственный фреймворк для приложений PHP, и у меня есть несколько фреймворков. Идея заключается в том, что каждый маршрутизатор обрабатывает определенный шаблон маршрута, например:

http://someapplication.org/services/awebservice/

Этот код будет вызывать ServiceRouter, который обрабатывает веб-службы маршрутизации. Перед вызовом любого Маршрутизатора я проверяю, существует ли Маршрутизатор, и если он существует, то я бы вызвал метод, чтобы проверить, является ли маршрут действительным, что-то вроде этого:

if ( RoutingManager::RouterExists($route) )
{
   $router = RoutingManager::GetRouter($route);

   if ( !$router->IsValid )
      RoutingManager::RedirectTo404();
}

Идея состоит в том, чтобы найти ваш обработчик 404 в классе и делегировать задачу маршрутизации в разные классы, чтобы разрешить множество маршрутизаторов и сделать ваше приложение более изменчивым (масштабируемым)

Надеюсь, я смогу помочь!

0 голосов
/ 17 марта 2011

вы можете использовать .htaccess (если используете apache), чтобы направить весь запрос на вашу страницу индекса.Обычно представление контроллера (и действия) связано с файлом или функцией.поэтому, если вы хотите показать пользовательское сообщение об ошибке, просто проверьте файл, класс или его методы.

, например: - index.php?controller=control1&action=action1.

if(!file_exists('control1.php'))
    if(!method_exists($controller, 'action1'))
        //route to error handler
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...