2013-12-17 64 views
1

我有一個控制器後鉤:如何在CodeIgniter中使用params /獲取控制器鉤子?

$hook['post_controller'][] = array(
    'class' => 'PostControllerHook', 
    'function' => 'post_controller', 
    'filename' => 'PostControllerHook.php', 
    'filepath' => 'hooks', 
    'params' => array('controller') 
); 

hooks documentation說,我可以爲我的鉤PARAMATERS。我如何指定這些參數?此外,我需要訪問我的控制器對象,這就是爲什麼我試圖將它作爲參數傳遞。

回答

1

您正在傳遞參數。

您是否期望在post_controller掛鉤之前訪問剛纔運行的控制器?這不會像你期望的那樣工作。如果您將一個類傳遞給鉤子,代碼點火器將嘗試實例化一個類,因此您無法直接傳遞控制器實例。

試想一下第一你有一個控制器

class Blog extends CI_Controller 
{ 
    public function doHookStuff() 
    { 
     echo "I'm running in a hook I hope!"; 
    } 
} 

你能做的是從你的鉤子調用get_instance輔助函數。

class PostControllerHook 
{ 
    function post_controller($params) 
    { 
    // $params[0] = 'controller' (given the params in the question) 

    // $controller is now your controller instance, 
    // the same instance that just handled the request 
    $controller =& get_instance(); 

    $controller->doHookStuff(); 
    } 
} 

如果您想了解更多的信息,所有的答案都坐在系統/核心/ CodeIgniter.php系統/核心/ Hooks.php。有點複雜,但不是太糟糕。

+0

等等,我甚至不知道我是如何傳遞參數的。 $控制器是如何設置的?基本上,我需要用我的控制器保存/返回一個變量,然後將其包裝在post_controller中。 – NobleUplift

+0

'$ CI'是我所示範例中的控制器。你可以把'$ controller =&get_instance();'如果你喜歡的話。我對我的答案做了一些改變,以便清除它;看看你的想法。 – quickshiftin

+0

因此,如果我將'params'改成'array('apple','banana','grape')',那些是傳入鉤子的靜態字符串,而不是變量名?我沒有看到這個參數鍵的重點。 – NobleUplift

相關問題