2012-01-20 46 views
2

干擾我重構重複我的控制器操作成preDispatch方法的頂部的一些常見的行爲 - 這是偉大的,但我有活到一般甚至400錯誤哪裏有真應了404的Zend控制器preDispatch預處理和訊

這是因爲默認preDispatch方法不知道需要什麼動作 - 所以我不能測試,看看它是否存在,404如果不。

除了完全的Zend控制器的調度()方法並傳遞動作名稱preDispatch - 是有更好的解決辦法?

更新:請注意,這是Zend框架的1.10

+0

您獲得了請求對象,所以你可以檢查自己 –

+0

引用我自己的評論如下:'動作名稱與動作不一樣''方法''名稱' – HorusKol

+0

什麼是動作「方法」名稱?你正在做一些重定向或在你的行動中調用其他對象? –

回答

2

嘗試這樣的事:

public function preDispatch(Zend_Controller_Request_Abstract $request) 
{ 
    $front = Zend_Controller_Front::getInstance(); 
    if($front->getDispatcher()->isDispatchable($request)) { 
     // if dispatchable do some stuff 
    } else { 
     // else show the error 
    } 
} 
+0

我想我需要玩與控制器的其他部分得到這個工作正常 - 但它肯定似乎是正確的一步。 – HorusKol

+0

似乎isDispatchable始終是真實的在這一點上... – HorusKol

0

。 。 。默認的preDispatch方法不知道要求什麼操作是 。 。 。

您可以通過調用請求對象下面的方法得到的preDispatch()方法控制器和動作名稱:

public function preDispatch(Zend_Controller_Request_Abstract $request) 
{ 
    $controller = $request->getControllerName(); 
    $action = $request->getActionName(); 
    // Do stuff 
} 
+0

啊 - 但動作的名稱是不一樣的行動「」方法「的名字 - 我想這條路線,並最終從調度複製的代碼大片在意識到我只是在走向複製麪食混亂之前,先獲得方法名稱 – HorusKol