0

我有一個項目女巫我開始時沒有使用ZF 1模塊結構現在我需要放置一個模塊結構 管理用戶(對我來說更有意義)。我的問題「默認」路線應該試着去:controller /:action /:id和模塊路線
應該與:module /:controller /:action /:id默認從ZF 1是使用上面沒有:id
但我的「邏輯」需要:ID字段,我該如何使這項工作?ZF Zend_Controller_Router_Route_Module模塊默認路由

什麼,我試圖來:

protected function _initModuleAutoload() 
{ 
    $modelLoader = new Zend_Application_Module_Autoloader(
        array('namespace' => 'DM', 
         'basePath' => APPLICATION_PATH . '/modules/default') 
        , array('namespace' => 'UM', 
       'basePath' => APPLICATION_PATH . '/modules/users') 
    ); 

    $modelLoader->addResourceType('service', 'services', 'Service'); 
    $modelLoader->addResourceType('serviceplugin', 'services/plugins', 'Service_Plugin'); 

    return $modelLoader; 
} 

public function _initFrontController() 
{ 
    $front = Zend_Controller_Front::getInstance(); 
    $router = $front->getRouter(); 

    $route1 = new Zend_Controller_Router_Route(
        ':module/:controller/:action/:id/', 
        array(
         'id' => '\d+' 
         , 'module' => 'default' 
         , 'controller' => 'index' 
         , 'action' => 'index' 
        ) 
    ); 

    $router->addRoute('default', $route1); 

    $front->addModuleDirectory(APPLICATION_PATH . "/modules/"); 

    $front 
      ->registerPlugin(new Far_Access_Plugin_Identity(), 1) 
      ->registerPlugin(new Far_Access_Plugin_Access(), 2) 
      ->throwExceptions(true) 
    ; 

    return $front; 
} 

還試圖爲用戶創造的,而不是默認的第二條途徑,但沒有奏效。

任何想法?我究竟做錯了什麼?

當我提供此鏈接時,freenode中irc的幫助已在頻道#zftalk中給出。

Bittarman:crash82:在它的id:添加要求的id,所以它必須是[\ d] +
Bittarman:或,只需添加 一個Zend_Controller_Router_Route_Module拴 Zend_Controller_Router_Route中只用的一個實例,默認設置爲 ,其ID爲false。
Bittarman:也_initModuleAutoload,是沒有意義的 Bittarman:具有在模塊目錄的「默認」模塊,是有點 錯誤
Bittarman:你從 停止FrontController設計資源由具有_initFrontController
Bittarman工作:所以resources.frontController將不再起作用。

crash82:哼......這麼多問題:(,這樣我就可以放置 「默認」模塊到應用程序的目錄和任何其他模塊 可以繼續從模塊/路徑加載

Bittarman:是的:)

crash82:要嘗試 Bittarman:和,每個具有引導模塊,提供它自己的模塊資源加載
Bittarman:所以,如果你去創造更多這樣的,你結束每個模塊有兩個。 Bittarman:你會驚訝有多少人在做這件事。
Bittarman:S/THT /是/

+1

默認路由啓動ZF總是在路由時測試模塊。如果使用默認路由,添加模塊不會影響路由。只需添加模塊作爲第一個參數,它應該工作。如果你願意,看看'Zend_Controller_Router_Route_Module'中的代碼 – RockyFord 2012-04-30 04:49:03

+0

是的,這是答案的一部分。 :-)謝謝 – 2012-04-30 21:32:47

回答

0

當我需要傳遞參數的URL在我的劇本我用了幾個方法之一。對於大多數簡單的事情來說,並不需要創建新的路線。

  1. <a href="/music/index/album/id/<?php echo $variable->id ?>"><?php echo $track->album ?></a>。將參數傳遞爲/ id/album_id
  2. 使用url()視圖幫助程序:<?php echo $this->url(array('controller' => 'index', 'action' => 'index', 'id' => $variable->id)); ?>此幫助程序還將採用模塊作爲第一個參數。
  3. 視圖腳本中的前兩項工作,在控制器中執行相同的操作,您可以使用reidrector動作助手:$this->getHelper('Redirector')->gotoSimple('action'=> 'someAction', 'controller' => 'someController', 'module' => 'someModule', array('id' => $id);控制器,模塊和參數可選,缺省值爲NULL
  4. 或者您可以使用操作實用程序方法_forward():$this->_forward($action, $controller, $module, array($params))與gotoSimple()具有相同的語法。

還有其他的方法來實現這種路由的,我要把它留給你找到休息,但你可能在當前版本Action Helpersutility methodsview helpers

+0

是的,但我不想指定id/1只是/ 1,我很懶...... :) – 2012-05-01 19:59:50

+0

這種或那種方式你必須指定變量,你的選擇你如何做到這一點。 – RockyFord 2012-05-02 04:54:38