如何防止應用程序使用任何參數呈現viewscript。Zend阻止應用程序加載viewscript
所以,如果我有東西是
www.mywebsite.com/myapplication/mycontroller/some/params
我怎麼能阻止它,這樣無論它贏得了」控制器後會發生什麼加載視圖腳本。我已經能夠在行動中做到這一點,但我想爲所有行動做到這一點。
如何防止應用程序使用任何參數呈現viewscript。Zend阻止應用程序加載viewscript
所以,如果我有東西是
www.mywebsite.com/myapplication/mycontroller/some/params
我怎麼能阻止它,這樣無論它贏得了」控制器後會發生什麼加載視圖腳本。我已經能夠在行動中做到這一點,但我想爲所有行動做到這一點。
這是我必須做的就是它做什麼,我想:
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);
}
默認情況下,前端控制器啓用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
我認爲你需要重新考慮你的問題。這是一個路由問題,你不想通過控制器級別路由?這是一個顯示問題,因爲您將它們用於其他目的,所以不希望顯示這些內容?這是一個安全問題嗎? – RockyFord
@RockyFord更喜歡如果用戶沒有登錄,我不想顯示該頁面。 – Matt
在這種情況下,您可能希望使用[Zend_Acl](http://framework.zend.com/manual/en/zend.acl.html)執行此操作,以便每次請求時,您的應用程序都可以檢查登錄狀態並將其重定向爲需要。 – RockyFord