我想在PHP中構建一個自定義的MVC框架。我剛開始使用這個MVC和框架的東西,我不是很好。PHP MVC 404 /錯誤處理的壞URL
我創建了所有一般的東西。模型,控制器和視圖的庫和我有一個普通的應用程序啓動和運行。
我想現在納入一些錯誤處理。主要針對不良網址的用戶端。我想使頁面未找到或404錯誤。所以我需要一種方法來檢查錯誤的控制器,動作和查詢字符串。然後將用戶發送到404頁面。
在MVC環境中這樣做的最佳做法是什麼?
編輯
這是一個基於學習的項目,它不適用於生產。
我想在PHP中構建一個自定義的MVC框架。我剛開始使用這個MVC和框架的東西,我不是很好。PHP MVC 404 /錯誤處理的壞URL
我創建了所有一般的東西。模型,控制器和視圖的庫和我有一個普通的應用程序啓動和運行。
我想現在納入一些錯誤處理。主要針對不良網址的用戶端。我想使頁面未找到或404錯誤。所以我需要一種方法來檢查錯誤的控制器,動作和查詢字符串。然後將用戶發送到404頁面。
在MVC環境中這樣做的最佳做法是什麼?
編輯
這是一個基於學習的項目,它不適用於生產。
您可以使用.htaccess
(如果使用apache)將所有請求路由到您的索引頁面。通常控制器(和動作)視圖與文件或功能相關聯。所以,如果你想顯示自定義錯誤信息,只需檢查文件,類或其方法。
例如: - index.php?controller=control1&action=action1
。
if(!file_exists('control1.php'))
if(!method_exists($controller, 'action1'))
//route to error handler
好吧,如果你正在學習像你說的,因爲有一件事是打破了應用程序在家裏,另外一個失去的錢,你不應該用你的框架生產代碼憤怒的客戶:)
返回問題。我爲PHP應用程序構建了自己的定製框架,並且在我的框架中有幾個路由器。這個想法是,每個路由器處理路線的具體模式,是這樣的:
http://someapplication.org/services/awebservice/
此代碼將調用ServiceRouter,它處理路由的Web服務。調用任何路由器之前,我檢查,如果路由器存在,如果是這樣的話,我會打電話的方法來檢查路線是有效的,這樣的事情:
if (RoutingManager::RouterExists($route))
{
$router = RoutingManager::GetRouter($route);
if (!$router->IsValid)
RoutingManager::RedirectTo404();
}
的想法是找到你的404處理程序一個類,並委派路由到不同類的任務,以允許各種路由器,並使您的應用程序更加可變(可擴展)
希望我能幫上忙!
我有類似的東西。我有一個單一的路由文件讀取URL並將其分解爲控制器和操作。然後它檢查控制器文件是否存在以及該控件中的操作是否存在。如果沒有,它會設置一個404控制器和我創建的操作。現在我還必須處理URL後面的查詢字符串,它將主要由我的模型處理? – Dan 2011-03-17 20:48:42
在引導程序中添加錯誤處理程序。
例如,在我的我有:
public function error(){
$this->view->msg = 'Page not found';
$this->view->render('error/index');
}
添加爲您在引導的方法。哪裏取決於你的結構。如果找不到方法或控制器,則調用error()方法。
這可能是最簡單的方法。
您是否使用單個控制器將請求路由到其他控制器?如果是的話,你可以簡單地檢查文件是否存在,以及當你說自定義異常處理程序時,它是否不將它發送到你的默認錯誤控制器 – JohnP 2011-03-17 05:16:37