我正在尝试用PHP构建自定义MVC框架。我刚开始使用这个MVC和框架的东西,我不是很好。
我创造了所有一般的东西。模型,控制器和视图的库,我得到了一个通用的应用程序并运行。
我想现在加入一些错误处理。主要是在用户端的坏网址。我想要找不到页面或404错误。所以我需要一种方法来检查错误的控制器,操作和查询字符串。然后将用户发送到404页面。
在MVC环境中执行此操作的最佳做法是什么?
修改
这是一个基于学习的项目,不适合生产。
答案 0 :(得分:3)
首先,如果您计划进行生产,建议您不要自行开发自定义框架。您可以使用许多优秀的框架,具有良好的灵活性,更重要的是具有更高的性能。
来到这个问题。首先编写一个用于管理404的自定义异常处理程序。我建议在你创建控制器的Object的系统/核心类中调用它们,如果它们不存在则调用它。
答案 1 :(得分:1)
在引导程序中添加错误处理程序。
例如,在我的作品中我有:
public function error(){
$this->view->msg = 'Page not found';
$this->view->render('error/index');
}
在引导程序中添加对方法的检查。哪取决于你的结构。如果未找到方法或控制器,请调用error()方法。
这可能是最简单的方法。
答案 2 :(得分:0)
您可以使用.htaccess
(如果使用apache)将所有请求路由到您的索引页面。通常控制器(和动作),视图与文件或功能相关联。因此,如果要显示自定义错误消息,只需检查文件,类或其方法。
例如: - index.php?controller=control1&action=action1
。
if(!file_exists('control1.php'))
if(!method_exists($controller, 'action1'))
//route to error handler
答案 3 :(得分:0)
好吧,如果你像你说的那样学习,你不应该使用你的框架来生成代码,因为有一件事在家里打破了应用程序而另一件事就是在愤怒的客户中浪费钱:)
回到问题所在。我为PHP应用程序构建了自己的自定义框架,我在我的框架中有几个路由器。这个想法是每个路由器处理一个特定的Route模式,如下所示:
http://someapplication.org/services/awebservice/
此代码将调用处理路由Web服务的ServiceRouter。在调用任何路由器之前,我检查路由器是否存在,如果存在,那么我会调用一个方法来检查路由是否有效,如下所示:
if ( RoutingManager::RouterExists($route) )
{
$router = RoutingManager::GetRouter($route);
if ( !$router->IsValid )
RoutingManager::RedirectTo404();
}
我们的想法是将404处理程序定位到一个类,并将路由任务委派给不同的类,以允许各种路由器,并使您的应用程序更易于更改(可扩展)
希望我能帮忙!