2010-09-01 20 views
2

我想創建一個非常基本的MVC框架來更好地理解模式。在MVC中下標URL路由

我無法理解URL路由部分。 到目前爲止我瞭解,URL攜帶這種格式3條的信息基礎件: www.site.com/controller/method/querystring

因此,考慮以下網址:

www.site.com/user/delete/john 

'user' is the controller 
'delete' is the method of said controller 
'john' is the query string 

在我的框架,我有它,所以如果控制器沒有在URL中指定,它默認爲'索引'。 如果一個方法沒有在URL中指定,它默認爲'show'(它只輸出html)。

這樣我可以去www.site.com,因爲它沒有一個控制器或方法在url中, 控制器變成'索引'和方法'顯示',因此只需加載索引視圖。

但是,如果我不想提供該網址的方法,但只是www.site.com/controller/querystring 像這樣的內容: www.site.com/user/john

這理想情況下會爲John加載配置文件。 但是,框架認爲url中的'john'是調用的方法,而不是查詢字符串。

什麼是標準,一種區分兩者的實用方法?

PS:

我有這個在我的.htaccess

RewriteRule ^(.*)$ index.php?$1 [L,QSA] 

呼應$ _ SERVER [ 'QUERY_STRING']中http://site/profile/john給'資料/約翰/

+1

有沒有這樣的事情作爲一個標準。一旦你用這種方式構建一個URL www.site.com/controller/method/querystring,你開始對開發者 – stillstanding 2010-09-01 07:42:18

+0

執行規則什麼是構建URL的其他方式? – sqram 2010-09-01 22:08:07

回答

2

我控制器通常定位處理程序方法從更多到更少的特定搜索。如果找到了一個方法,那麼它會被傳遞給它的參數的「尾部」調用。例如,如果user/delete/john給出,它試圖調用,以便:

action_user_delete_john() 
action_user_delete('john') 
action_user('delete/john') 
generic_fallback_method('user/delete/john') 

在你的情況,我會定義一組user_<operation>方法(action_user_deleteaction_user_edit等)和默認action_user方法,這將是當沒有提供operation PARAM和應該處理的URL像user/john

我覺得這種技術相當靈活和強大,但是沒有標準,你可以自由地創造自己的調用。

+0

我最終做的是,當我把網址分解成片段(site.com/a/b/c/d)...'a'後,第一個數組元素始終是控制器。然後我看看'b',看看它是否是'a'的方法。如果不是,那麼它的一個參數被傳遞給一個實例化的實例。所以在這個例子中,我剛剛使用的url,會發生什麼是$ a-> b>(array('c','d')...如果'b'不是'a'的方法,那麼會發生什麼發生的是$ class = new $ a(array('b','c','d') – sqram 2010-09-04 08:49:07