2012-11-08 49 views
1

我正在使用ToroPHP進行路由。ToroPHP路由 - 404動作

我的代碼:

Toro::serve(array(
    "/" => "home", 
)); 

Toro::serve(array(
    "/website/:string" => "website", 
)); 

// Fired for 404 errors 
ToroHook::add("404", function() { echo '404 error'; }); 

更多代碼

託羅:服務去這個班,工作正常,爲homewebsite

class home { 
    function get() { 
     echo 'My home'; 
    } 
} 

class website { 
    function get($slug) { 
     echo $slug; 
    } 
} 

的.htaccess

這是我的htaccess的文件看起來像。這只是一點點改寫在本地主機上工作。

看最後一排...

RewriteEngine On 
RewriteBase /my_localhost_dir/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.+)$ index.php/$1 [L] 

問題

如果我去一個網頁,我已經安裝有Toro::serve,它工作得很好。

如果我去一個沒有定義的URL,它會給我一個白屏。

我希望它會給我「404錯誤」的鉤我補充說。我做錯了什麼?

例如:如果我去/ nocontent /它給了我一個白色的屏幕,並響應200好。

+1

你是否將所有對子目錄的請求重寫爲index.php?否則,您的請求將無法到達PHP,因爲Apache無法找到指定的文件。 – alexn

+0

@alexn我使用/ website /更新了我的代碼,這也適用。當我去/網站/無論/時,它迴應我的slu''無論'。然而/ nocontenthere /給出了一個白色屏幕。我不使用文件夾,只使用虛擬URL,但工作的類都包含在一個文件夾中,但這不重要? –

回答

1

確保您將所有請求重定向到index.php。這是通過使用mod_rewrite完成的。將以下內容放在.htaccess文件夾中:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

其次,您正在使用Toro::serve錯誤的方式。你不應該打多個電話來服務。相反,通過多種途徑第一個電話:

Toro::serve(array(
    "/" => "home", 
    "/website/:string" => "website", 
)); 

末,調用服務前添加404掛機。否則,將不會被發現:

ToroHook::add("404", function() { 
    echo "404 - Not Found"; 
}); 
+0

我使用重寫的htaccess使其在本地主機上正常工作。然而,這兩個步驟,首先移動鉤子並使所有的調用在同一個數組中做了訣竅!現在正常工作! –

3

我相信掛鉤定義有來第一,即

<?php 

ToroHook::add("404", function() { 
    header('HTTP/1.1 404 Not Found'); 
    echo '404 error'; 
    exit; 
}); 

Toro::serve(array(
    "/" => "home", 
    "/website/:string" => "website", 
)); 

此外,還要確保你有一個。htaccess文件將所有請求按照文檔重新寫入index.php。我應該知道,作爲項目的貢獻者;)

此外,應該只有一個致電Toro::serve();你只需要傳遞一個數組給它作爲關鍵字的URL模式和要調用的路由,就像上面我的例子那樣。

+0

我看到你現在在github上更新它,很好!就像一個旁註,我沒有在本地主機環境中獲得原始的htaccess文件工作。也許我的更好(在我的問題上面)? –

+0

@JensTörnell嗨仁。只要去做什麼工作。如果您遇到了死亡的白屏,那麼值得留意一下您的PHP錯誤日誌,以便您診斷問題並查看哪些致命錯誤正在停止腳本執行。 –