簡體   English   中英

Zend Framework:單獨目錄中的控制器

[英]Zend Framework: Controllers in separate directories

我在Zend框架中還很陌生,但是很快就會學習。 我遇到了以下問題,但是我真的不知道我的解決方案是否很好:)

我創建了一個使用小部件的應用程序。 Widget是實現Widget_Interface的類,並由Widget_Manager執行。

可以通過WidgetController (調用Widget_Manager等)來加載小部件。 現在我遇到的問題是:還可以配置窗口小部件,並使代碼更加透明,我希望窗口小部件具有自己的控制器(當前,它只是一個類)。 但是問題是,我希望所有窗口小部件配置都可以通過WidgetController ,然后傳遞給特定的窗口小部件控制器。

一個例子:假設我有一個名為“ scrobbler”的小部件。 現在,當在UI中配置它時,我想使用更新的設置發出Ajax請求。 我可以發出類似http://myapp.com/scrobbler/update-info/的請求,這樣框架將運行ScrobblerController然后從這里開始處理信息。 我的想法是在http://myapp.com/widget/update/scrobbler/上發出請求,因此該框架運行WidgetController WidgetController然后會叫ScrobblerController ,並通過其它參數。

我知道Zend_Controller_forward()函數,但我想將小部件控制器和我的應用程序的控制器分隔開(例如/ application / controllers中的應用程序控制器和/ application / controllers / widgets中的小部件控制器)。

是否可以做到這一點,我必須在Zend框架配置中添加什么? 希望我不要太復雜了:)

好天氣

編輯:使用模塊化結構解決了此問題,並將普通類移到了根目錄中。

在這種情況下,您可能使用了控制器助手而不是控制器。 因此,假設WidgetController負責更新所有類型的小部件。 updateAction需要找到有關您希望配置的窗口小部件類型的信息,這是scrobbler參數。 您需要命名此參數,以便可以輕松訪問它。 這可以通過在uri中的scrobbler之前添加route或添加名稱來完成。

解決方案1 :添加路線:

在引導程序中:

public function __initRoutes () {
    $route = new Zend_Controller_Router_Route(
        'widget/update/:type',
        array (
            'controller' => 'widget',
            'action' => 'update'
        ),
        array (
            'type' => '[a-z_-]*'
        )
    );
    /* @var $fc Zend_Controller_Front */
    $fc = $this->bootstrap('FrontController')->getResource('FrontController');
    /* @var $router Zend_Controller_Router_Rewrite */
    $router = $fc->getRouter();
    $router->addRoute('update-widget', $route);
}

解決方案2 :在uri中添加參數名稱:

/widget/update/type/widgetName


現在,在WidgetController :: updateAction中,您可以使用$this->_getParam('type') this- $this->_getParam('type')獲取要更新的小部件。

因此,代碼可能類似於:

class WidgetController extends Zend_Controller_Action
{
  public function updateAction ()
  {
     $widgetName = $this->_getParam('type');
     $this->view->result = $this->_helper->Widgets->update($widgetName);
  }
}

class App_Controller_Helper_Widgets extends Zend_Controller_Action_Helper
{
  public function update($widgetName)
  {
     $widgetManager = new App_Model_WidgetManager();
     $widget = $widgetManager->load($widgetName);
     $widget->setOptions($this->getRequest()->getParams());
     return $widget->save();
  } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM