2012-06-20 102 views
-1

如何防止應用程序使用任何參數呈現viewscript。Zend阻止應用程序加載viewscript

所以,如果我有東西是

www.mywebsite.com/myapplication/mycontroller/some/params

我怎麼能阻止它,這樣無論它贏得了」控制器後會發生什麼加載視圖腳本。我已經能夠在行動中做到這一點,但我想爲所有行動做到這一點。

+0

我認爲你需要重新考慮你的問題。這是一個路由問題,你不想通過控制器級別路由?這是一個顯示問題,因爲您將它們用於其他目的,所以不希望顯示這些內容?這是一個安全問題嗎? – RockyFord

+0

@RockyFord更喜歡如果用戶沒有登錄,我不想顯示該頁面。 – Matt

+0

在這種情況下,您可能希望使用[Zend_Acl](http://framework.zend.com/manual/en/zend.acl.html)執行此操作,以便每次請求時,您的應用程序都可以檢查登錄狀態並將其重定向爲需要。 – RockyFord

回答

0

這是我必須做的就是它做什麼,我想:

public function preDispatch(){ 
     if($this->User->isValid()){ 
      if($this->getRequest()->getActionName() !== 'login'){ 
        $this->_forward('login'); 
      } 
     } 
    } 

    public function loginAction(){ 
     $this->_helper->FlashMessenger('You must be logged in to do that!'); 
     $this->_flashMessenger = $this->_helper->getHelper('FlashMessenger'); 
     $this->view->messages = $this->_flashMessenger->getMessages(); 
     $this->_helper->viewRenderer->setNoRender(false); 
    } 
2

默認情況下,前端控制器啓用ViewRenderer操作助手。這個幫助器負責將視圖對象注入控制器,並自動渲染視圖。您可以通過以下方法之一動作控制器內禁用它:

class FooController extends Zend_Controller_Action 
{ 
    public function init() 
    { 
     // Local to this controller only; affects all actions, 
     // as loaded in init: 
     $this->_helper->viewRenderer->setNoRender(true); 

     // Globally: 
     $this->_helper->removeHelper('viewRenderer'); 

     // Also globally, but would need to be in conjunction with the 
     // local version in order to propagate for this controller: 
     Zend_Controller_Front::getInstance() 
      ->setParam('noViewRenderer', true); 
    } 
} 

裁判:http://framework.zend.com/manual/en/zend.controller.action.html

+0

我會給你一個鏡頭,我做到了,但我只是在沒有刪除幫手的情況下做了setNoRender。 – Matt

+0

要在全局範圍內執行此操作,可以在抽象控制器類中使用Eswar的'init()'函數,其中所有其他控制器都可以擴展。例如,我已經完成了基於JSON的API。 – curtisdf