2011-02-24 86 views
0

我正在使用Zend Framework來構建一個網站,並且我在調度循環中遇到了一些麻煩。Zend調度循環問題

通常情況下,Zend Framework URL是這樣構建的:http://www.domain.com/module/controller/action

在我的網站上,我使用自定義動態URL,這些URL是通過自定義方法在調度循環中解析的。因此,這些URL中的每一個在被解析後都會執行特定控制器和模塊的特定操作。

我需要執行一些任務,這些任務取決於被解析的模塊,控制器和操作。問題是我只能在發生dispatchLoopShutdown時知道解析的模塊,控制器和操作。我需要執行的任務將設置一些cookie,這些cookie將對發送到瀏覽器的輸出進行更改。

但是,此時視圖已經被渲染,並且dispatchLoopShutdown發生時設置的cookie不會相應地更改輸出。

所以,我的問題是...有沒有辦法強制視圖再次呈現?或者在dispatchLoopShutdown之前知道將執行哪些模塊,控制器和動作的方法?我也試圖在postDispatch上完成這個工作,但結果是一樣的!

希望我能解釋我的問題是正確的。

謝謝你的幫助。

+0

您可能要考慮使用http://framework.zend.com/manual/en/zend.controller.router.html – 2011-02-24 11:46:37

+0

使用控制器路由器我需要設置一些規則以匹配請求網址。我將不得不創建一個全面的規則並解析它們... – 2011-02-24 12:00:06

+0

在dispatchLoopShutdown之前,執行postDispatch。您是否考慮過使用編寫一個控制器插件來執行個別操作(即在插件中寫入postDispatch方法)。 – Marcin 2011-02-24 15:09:10

回答

0

這是關於Zend Framework序列的一個很好的模式。

您可以通過使用控制器插件知道派遣前的模塊,控制器和行動:

<?php 
class Custom_Controller_Plugin_CheckRoute extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch($request) 
    { 
     //Get Request 
     $controller = $request->controller; 
     $action  = $request->action; 
     $module  = $request->module; 

     //=> perform actions before dispatch 

     //Update the Request 
     $request->setModuleName('default') 
      ->setControllerName('index') 
      ->setActionName('action2'); 
    } 
} 
?>