2010-03-08 84 views
3

我爲我的網站使用了Zend Framework,並且創建了一個特殊模塊「api」來創建...嗯,一個API。Zend Framework:控制器目錄中的子目錄

現在,我的模塊中有很多控制器,我想在這個控制器目錄中創建子目錄以便「整理」它。我的新的結構是這樣的:

- controllers/ 
- controllers/contents/[controllers] 
- controllers/users/[controllers] 
- controllers/misc/[controllers] 

然而,我發現自己完全無法找到什麼樣的使用Zend_Controller_Router_Route中可以映射到這些控制器的URL和重定向的。是否有可能以某種方式做到這一點,或者我應該回到正常的結構並將我的所有控制器放在同一個目錄中?


我嘗試使用分離器_通過smack0007的建議和它似乎合乎邏輯的,Zend框架平時是怎麼指子目錄,但我得到了一個錯誤。


編輯:刪除,因爲它是不相關的問題,因爲這只是一個問題,因爲我沒有使用黑白配的情況下,相信我只好把大寫來的第一個字母長的錯誤文本該目錄。現在一切正常。

+0

因爲每個控制器可以有它自己:

最後,增加了航線意見,我認爲最好使用多個模塊。 api_contents模塊,api_users模塊。 我想現在去找到如何將子模塊放在模塊中! – Alexar 2010-03-08 15:22:39

+0

轉到[http:// stackoverflow。COM /問題/ 592299/Zend的框架-1-7-5-如何到變化控制器目錄] [1] [1]:http://stackoverflow.com/questions/592299/zend-framework-1-7-5-how-to-change-controller-directory – 2011-10-14 08:10:17

回答

3

我已經在1.5版本的項目中完成了這項工作,但我不知道它是否會繼續工作。

您必須在控制器前添加「{FOLDER} _」,然後在url中使用全名。

所以你的情況,你將有一個名爲控制器:

contents_FooController 

和路徑:

/contents_foo/index 
+0

好吧,在我看來,這種行爲已被改變:我嘗試訪問控制器中的Contents_FooController子目錄的「內容」控制器「目錄(在默認模塊中),它告訴我它找不到它。 我將用這些數據編輯問題信息。 – Hugo 2010-03-08 15:25:39

+0

爲我做一件事:將「contents」文件夾重命名爲「Contents」 – smack0007 2010-03-08 15:52:59

+0

讓我糾正我剛剛說的,它確實有效(編輯錯誤的目錄,抱歉),謝謝!我錯誤地認爲我必須將目錄的名稱改爲大寫,非常感謝您的幫助。 – Hugo 2010-03-08 16:38:39

0

我試圖在URL來完成多層次的舊應用程序,並避免使用大量的網址roules。 所以我想到了將控制器分組到子目錄併爲其定義一個url roule。

對於結構

 
modules 
--test 
    --controllers 
    --sub 
     -- OtherController.php 
    --DefaultController.php 

在我添加的模塊的bootstrap.php:

public function __construct($application) 
    { 
     parent::__construct($application); 
     $frontController = Zend_Controller_Front::getInstance(); 
     $frontController->addControllerDirectory(__DIR__ . '/controllers', 
      'test'); 
     $frontController->addControllerDirectory(__DIR__ . '/controllers/sub', 
      'test_sub'); 
    } 

DefaultController.php是

class Test_DefaultController extends Zend_Controller_Action { 
    public function subAction() 
    { 
     $level1 = $this->getRequest()->getParam('level1'); 
     $level2 = $this->getRequest()->getParam('level2'); 
     return $this->_forward($level2, $level1, 'test_sub'); 
    } 

因此,這將轉發給我們的控制器在子目錄中。與請求測試/默認/子/其它/指數

new Zend_Controller_Router_Route_Regex('([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)', 
    array(), 
    array(1 => 'module', 2 => 'controller', 3 => 'action', 4 => 'level1', 5 => 'level2'), 
    '%s/%s/%s/%s/%s' 
) 

現在,你可以調用的indexAction在OtherController.php