2008-12-19 53 views
0

嗯,我需要使它,所以任何用戶可以在我的網站foo.com/username用戶Zend框架。如何在Zend中創建foo.com/user?

問題是,我希望foo.com/login和其他控制器繼續工作,因爲我已經驗證沒有用戶可以被命名爲控制器即將使用的一個控制器。 htaccess不能更改或mvc配置不能工作。所以即時通訊使用路由器。

我知道,如果我使用類似:

$routes = array(); 
     $routes['entry'] = new Zend_Controller_Router_Route_Regex('SOME REGEX HERE', 
      array( 
       'controller' => 'profile', 
       'action'  => 'show' 
      ), 
      array( 
       'id' => "dsadsa", // maps first subpattern "(\d+)" to "id" parameter 
       1 => 'id' // maps first subpattern "(\d+)" to "id" parameter 
      ) 
     ); 

$router->addRoutes($routes); 

我可以讓這個正則表達式匹配一切都被重定向,但我不知道那裏有一個更好的辦法(不知何故鏈接2個路由器),其中i不必實際列出我的控制器在一個非常非常大的或。

有什麼想法?

回答

0

像這樣的東西應該工作:

$routes = array(); 

$routes['entry'] = new Zend_Controller_Router_Route(
    ':userName', 
    array( 
     'controller' => 'profile', 
     'action'  => 'show' 
    ) 
); 

然後添加所有其他航線,/登錄,/註銷等。Tim說,Zend的比賽路線以相反的順序,所以它會嘗試在最終將其發送到您的「用戶名」路線之前,與您的路由「白名單」進行匹配。

這將打破Zend爲確保控制器/操作存在而進行的任何類型的錯誤檢查,因爲如果沒有路由匹配,所有內容都將被路由到/ profile/show。

所有這些都可以很容易地避免,但是,如果你可以只處理foo.com/user/ <用戶名>。

0

你應該能夠定義你的用戶名路線(您的上述正則表達式的路線),並先將其添加到路由器上,然後只需添加您的控制器的路線,例如:

$router->addRoute('user', new Zend_Controller_Router_Route('controller/:var'));

Zend公司會盡力按照相反的順序將請求匹配到定義的路由。如果我的請求與您的控制器路由不匹配,它會嘗試將其與您的正則表達式路由匹配。

相關問題