2011-10-07 59 views
0

我想從URL中獲取控件名稱,並在index.php中動態匹配正確的控制器。動態路由與php前端控制器

我的應用程序根:/localhost/app/index.php

所以基本上,當我輸入/localhost/app/index.php/home,試圖inlude home_controller.php。 這裏是代碼;

$parts = array_slice(explode('/',$_SERVER["REQUEST_URI"]),3); 
if(file_exists(dirname(__FILE__)."/controllers/".$parts[0].'_controller.php')) 
{ 
    include dirname(__FILE__)."/controllers/".$parts[0].'_controller.php'; 
} 

它工作正常,如果應用程序根深度爲3的時候,我改變應用程序目錄像 它打破本地主機/第一/二/應用/ index.php文件/家

因爲它是由3爆炸, $ parts [0]不再是「家」 問題是如何以更有效的方式檢測控制器部分?

回答

0

我使用$ _SERVER paht_info變量計算,控制器部分..

$segments = array_slice(explode("/", $_SERVER["PATH_INFO"]),1); 

$ segment數組的零索引是控制器部分,其他部分是函數。 Btw你需要檢查數組邊界和是否設置path_info。

0

/localhost/app/index.php/home 本地主機/第一/二/應用/ index.php文件/家 聽起來像它使你的字符串$部件[0]一塊看起來像應用程序/ index.php文件/這將是一個無效的路徑。處理這個問題的唯一方法是使用/作爲分隔符來分割字符串,或者使用數組中最後一個作爲比較或遍歷每個分隔符的位置。 MVC的概念雖然是URL總是結構相似的第一部分,在這種情況下需要確定控制器,2+通常用於參數從控制器功能參考

+0

你使用codeigniter的方式? – chris

+0

謝謝。我沒有使用CI。在用「/」爆炸後,我仍然會有localhost,第一,第二,app,index.php,home ..我不想在這個數組中找到正確的controller.As你可以看到,它不是有效的。如果URL是localhost/first/second/app/index.php/home/settings,那麼如果反向運行會發生什麼?我只想調用家庭控制器的設置功能。 @chris –

+0

我只想着一些瘋狂的事情大聲笑。對於聽起來可能是你的最終遊戲,這些都不會奏效。 – chris