2011-11-03 43 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']);