CodeIgniter挂钩:从控制器获取数据';s方法


CodeIgniter Hook: Get data from controller's method

我在config/hooks.php中定义了一个钩子,如下所示:

$hook['post_controller'][] = 
    array(
        'class'    => 'notify',
        'function' => 'sendEmail',
        'filename' => 'notify.php',
        'filepath' => 'controllers'
    );

现在,这个钩子函数将在每个控制器的方法执行后运行。它正按照我想要的方式运行。所以到目前为止一切都很好。

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

现在我想在我的钩子notify-sendEmail方法中使用这些变量。

我不确定这是否可能。如果这是可能的,并且有人做过这种功能,请帮助我!

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

您可以使用数组将数据传递到钩子中。例如:在dashboard类上的index方法中,用户数据已经存储在$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
}