2011-08-12 30 views
0

我需要爲我的網站的自定義路由:Zend的路由器 - 問題 - 作品,但不是希望

一切都像:www.site.com/457485789479前人的精力被路由到指數/指數與PARAM ID/45 .. 其他一切應該與zend框架默認值一起工作。

我有這樣的路線:

resources.router.routes.test.type = "Zend_Controller_Router_Route" 
resources.router.routes.test.route = ":id" 
resources.router.routes.test.defaults.module = "default" 
resources.router.routes.test.defaults.controller = "index" 
resources.router.routes.test.defaults.action = "index" 
resources.router.routes.test.defaults.id = "" 

但現在,「URL視圖助手」不工作,一切都以「/」是否有人看到了錯誤,並能help`?

回答

0

使用像example.com/:id定製的路線將覆蓋缺省路由。這會產生意想不到的後果,因爲這些將不再起作用example.com/:moduleexample.com/:controller。這是我爲完成你的要求所做的。

我希望這個網址對於靜態頁面:

example.com/about 

,同時保持默認路由所以這仍然工作

example.com/:module 
example.com/:controller 

的方式我這樣做是使用插件來測試,如果我的請求可能被派遣。如果請求無法使用默認路由分派,那麼我會將請求更改爲適當的模塊以加載我的頁面。這裏是一個插件,你可以根據自己的需求進行修改:

class My_Controller_Plugin_StaticPageRoute extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher(); 
     // Can this request be dispatched 
     if (!$dispatcher->isDispatchable($request)) { 
      // return if not a single level request 
      if ('default' != $request->getModuleName() 
       && 'index' != $request->getActionName()) { 
       return; 
      } 
      // Get param to be used in new request ie. example.com/:param 
      $param = $request->getControllerName(); 
      // Set the request where to try next 
      $request->setModuleName('default'); 
      $request->setControllerName('index'); 
      $request->setActionName('index'); 
      $request->setParam('id', $param); 

      /** Prevents infinite loop if you made a mistake above **/ 
      if ($dispatcher->isDispatchable($request)) { 
       $request->setDispatched(false); 
      } 

     } 

    } 
} 
0

您應該使用Zend_Controller_Router_Route_Regex代替Router_Route

$router->addRoute('router-name', new Zend_Controller_Router_Route_Regex(
      '(\d{2,})', 
      array(
       'controller' => 'index', 
       'action' => 'index' 
      ), 
      array(1 => 'id'), 
      '%d' 
     ));