2011-03-17 80 views
2

我想在PHP中構建一個自定義的MVC框架。我剛開始使用這個MVC和框架的東西,我不是很好。PHP MVC 404 /錯誤處理的壞URL

我創建了所有一般的東西。模型,控制器和視圖的庫和我有一個普通的應用程序啓動和運行。

我想現在納入一些錯誤處理。主要針對不良網址的用戶端。我想使頁面未找到或404錯誤。所以我需要一種方法來檢查錯誤的控制器,動作和查詢字符串。然後將用戶發送到404頁面。

在MVC環境中這樣做的最佳做法是什麼?

編輯

這是一個基於學習的項目,它不適用於生產。

+0

您是否使用單個控制器將請求路由到其他控制器?如果是的話,你可以簡單地檢查文件是否存在,以及當你說自定義異常處理程序時,它是否不將它發送到你的默認錯誤控制器 – JohnP 2011-03-17 05:16:37

回答

0

您可以使用.htaccess(如果使用apache)將所有請求路由到您的索引頁面。通常控制器(和動作)視圖與文件或功能相關聯。所以,如果你想顯示自定義錯誤信息,只需檢查文件,類或其方法。

例如: - index.php?controller=control1&action=action1

if(!file_exists('control1.php')) 
    if(!method_exists($controller, 'action1')) 
     //route to error handler 
3

首先,如果您計劃生產,不建議開發自己的自定義框架。有許多優秀的框架可供您使用,具有良好的靈活性,更重要的是具有更高的性能。

即將出現問題。首先編寫一個用於管理404的自定義異常處理程序。我建議在您創建控制器的Object的系統/核心類中調用它們,並調用它們(如果它們不存在)。

+0

,即檢查控制器和/或在網址存在? – Dan 2011-03-17 20:59:49

+0

您不會檢查異常處理程序中是否存在控制器/操作。它將從一些路由類中完成。在那個路由類中,如果它們不存在,你將會拋出異常。希望這樣做。 – Shameer 2011-03-18 09:23:18

0

好吧,如果你正在學習像你說的,因爲有一件事是打破了應用程序在家裏,另外一個失去的錢,你不應該用你的框架生產代碼憤怒的客戶:)

返回問題。我爲PHP應用程序構建了自己的定製框架,並且在我的框架中有幾個路由器。這個想法是,每個路由器處理路線的具體模式,是這樣的:

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

此代碼將調用ServiceRouter,它處理路由的Web服務。調用任何路由器之前,我檢查,如果路由器存在,如果是這樣的話,我會打電話的方法來檢查路線是有效的,這樣的事情:

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

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

的想法是找到你的404處理程序一個類,並委派路由到不同類的任務,以允許各種路由器,並使您的應用程序更加可變(可擴展)

希望我能幫上忙!

+0

我有類似的東西。我有一個單一的路由文件讀取URL並將其分解爲控制器和操作。然後它檢查控制器文件是否存在以及該控件中的操作是否存在。如果沒有,它會設置一個404控制器和我創建的操作。現在我還必須處理URL後面的查詢字符串,它將主要由我的模型處理? – Dan 2011-03-17 20:48:42

1

在引導程序中添加錯誤處理程序。

例如,在我的我有:

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

添加爲您在引導的方法。哪裏取決於你的結構。如果找不到方法或控制器,則調用error()方法。

這可能是最簡單的方法。