使用CodeIgniter在辅助函数中获取全局变量

时间:2011-11-03 00:45:05

标签: php codeigniter scope global-variables

我正在创建一个函数,它会在我的视图中插入一些简单的HTML。我已经多次没有遇到任何问题,但这次我将使用在Controller中设置的变量>提取到视图中。

现在,我显然不想离开我的单行快捷方式:<?php echo showStatusMessages(); ?>通过检查是否设置了变量,然后将它们作为参数等发送,因为这只会杀死函数调用的点共

经过一些尝试和失败后,我最终得到了一个受保护的属性,我想在我的函数中使用它。知道如何找到解决办法吗?

// Outputs success/error messages
function showStatusMessages() {

    $variables = array(
        'success',
        'error'
    );

    foreach ($variables as $variable) {
        // Cannot access protected property CI_Loader::$_ci_cached_vars
        if ($variable = $GLOBALS['CI']->load->_ci_cached_vars[$variable]) ${$variable} = $variable;
        break;
    }

    ob_start();

    // Success message set
    if (isset($success)) :
        echo '<div class="message_box success_color">'.$success.'</div>';
    endif;

    // Error message set
    if (isset($error)) :
        echo '<div class="message_box error_color">'.$error.'</div>';
    endif;

    $msg = ob_get_contents();
    ob_end_clean();

    return $msg;

}

2 个答案:

答案 0 :(得分:1)

您是否有理由不使用视图?

<?php if (isset($success)) : ?>
    <div class="message_box success_color"><?php echo $success; ?></div>
<?php endif; ?>
<?php if (isset($error)) : ?>
    <div class="message_box error_color"><?php echo $error; ?></div>
<?php endif; ?>

然后使用单行调用此视图,如下所示(假设您将视图命名为“statusMessage”:

<?php $this->load->view('statusMessage'); ?>

这样做可以完成你正在努力的功能;你可以从一行中多次调用它。

答案 1 :(得分:0)

同意它不是首选方法,但是分配$GLOBAL将正常工作,并且可以在层次结构中运行的函数下访问。尝试将其分配给$GLOBALS['ci']时会遇到麻烦。

在你的帮手中:

function saveSomething($id){
    $GLOBAL['savedVars'][] = $id;
}

在您的助手被召唤之后,在您看来:

var_dump($GLOBAL['savedVars']);