2011-11-03 47 views
0

我正在制作一个函数,它会在我的视图中插入一些简单的HTML。我已经好几次没有问题了,但是这一次我将使用在Controller->提取到视图中设置的变量。使用CodeIgniter获取辅助函数中的全局变量

现在,我显然不想从我的单行快捷方式中删除:<?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; 

} 

回答

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'); ?> 

这样做,这样完成你什么功能是试图;你可以从一行中多次调用它

+0

奇怪的是我没有想到的是优雅而简洁的解决方案。早在那个时候,我只会使用一个简单的'include()'语句,有趣的是,使用框架会使这种简单的思想变得复杂。谢谢! – Seralize

0

同意这不是首选的方法,但是指定$GLOBAL将工作得很好,并且可以在层次结构中运行的函数下面访问,您将遇到尝试分配的麻烦它到了$GLOBALS['ci']

在您的帮助:

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

而在你的帮手后,你的观点被称为:

var_dump($GLOBAL['savedVars']);