CodeIgniter Hook:从控制器的方法获取数据

时间:2015-12-01 10:26:43

标签: php codeigniter class hook

我在$hook['post_controller'][] = array( 'class' => 'notify', 'function' => 'sendEmail', 'filename' => 'notify.php', 'filepath' => 'controllers' ); 中定义了一个钩子,如下所示:

dashboard

现在这个钩子函数将在每个控制器的方法执行后运行。它正在以我希望它运行的方式运行。所以一切都很好。

现在假设我有一个名为index的控制器,其中有一个名为notify-sendEmail的方法。在索引方法中,我调用不同的模型方法并获取数据并将其存储为不同的变量。

现在我想在我的钩子element.getScene().getWindow() 方法中使用这些变量。

我不确定这是否可能。如果有可能并且任何人都已经完成了这种功能,请帮助我!

基本上我的问题是:我们可以在钩子控制器方法中从当前控制器方法访问所有对象数据。

1 个答案:

答案 0 :(得分:0)

您可以使用数组将数据传递到钩子中。例如:在仪表板类的索引方法中,userdata已存储在$userdata

// create property for userdata into big object
$this->userdata = $userdata;

然后在你的钩子通知。你需要检查userdata属性是否存在?

function sendEmail(){
    $CI =& get_instance();
    $required = array('email', 'subject', 'body'); // asume these parameter required

    // required userdata property. if property not set then print error
    if (!property_exists($CI, "userdata"))
    {
        echo "userdata required";
        return; // do nothing.
    }

    // if userdata is not array then print error
    if (!is_array($CI->userdata))
    {
        echo "invalid format userdata";
        return; // do nothing
    }

    // still here? it means userdata property exist and it's array
    $config_email = array();
    foreach($required as $key => $value)
    {
       if (!array_key_exist($value, $CI->userdata))
       {
            // some required parameter not exist.
            echo "field ".$value." is required";
            return;
       }

       // passing data into $config_email
       $config_email[$value] = $CI->userdata[$value];
    }

   //`do your stuff here to send email..
   // $config_email already set userdata. you still can modified them

}