Получение глобальной переменной во вспомогательной функции с CodeIgniter - PullRequest
0 голосов
/ 03 ноября 2011

Я делаю функцию, которая будет вставлять простой 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 ]

1 голос
/ 04 ноября 2011

Есть ли причина, по которой вы не используете представление?

<?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 голосов
/ 26 июля 2012

Согласитесь, что это не предпочтительный метод, однако присвоение $GLOBAL будет работать просто отлично и будет доступно ниже функции, выполняемой в иерархии. Вы столкнетесь с проблемами при попытке назначить его на $GLOBALS['ci'].

В вашем помощнике:

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

И, на ваш взгляд, после вызова вашего помощника:

var_dump($GLOBAL['savedVars']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...