Code Igniter Просмотров Запомнить предыдущие переменные! - PullRequest
4 голосов
/ 13 октября 2010

У меня есть следующий код в контроллере:

$data['what'] = 'test';
$this->load->view('test_view', $data);
$this->load->view('test_view');

View:

<?php
    echo $what;
?>

Результат при запуске этого кода:

testtest

Shouldnэто не просто «тест», потому что во второй раз я не передаю переменную $ data?Как я могу заставить CodeIgniter вести себя таким образом?

EDIT1:

Я нашел временное решение этой проблемы:

Заменить в Loader.php:

/*
* Flush the buffer... or buff the flusher?
*
* In order to permit views to be nested within
* other views, we need to flush the content back out whenever
* we are beyond the first level of output buffering so that
* it can be seen and included properly by the first included
* template and any subsequent ones. Oy!
*
*/ 

С:

 /*
 * Flush the buffer... or buff the flusher?
 *
 * In order to permit views to be nested within
 * other views, we need to flush the content back out whenever
 * we are beyond the first level of output buffering so that
 * it can be seen and included properly by the first included
 * template and any subsequent ones. Oy!
 *
 */ 

 if (is_array($_ci_vars)){
   foreach ($_ci_vars as $key12 => $value12) {
      unset($this->_ci_cached_vars[$key12]);
   }
 }

Это должно удалить переменные из кэша после их использования.

ОТЧЕТ ОБ ОШИБКАХ: http://bitbucket.org/ellislab/codeigniter/issue/189/code-igniter-views-remember-previous

1 Ответ

1 голос
/ 13 октября 2010

Это интересно, я никогда не использовал его таким образом, но вы правы, он не должен этого делать, возможно, это какой-то вариант кэширования.В худшем случае вы должны назвать это так:

$this->load->view('test_view', '');

Редактировать:

Я только что проверил код Code Igniter из их хранилища.Причина этого в том, что они действительно кэшируют переменные:

    /*
     * Extract and cache variables
     *
     * You can either set variables using the dedicated $this->load_vars()
     * function or via the second parameter of this function. We'll merge
     * the two types and cache them so that views that are embedded within
     * other views can have access to these variables.
     */ 
    if (is_array($_ci_vars))
    {
        $this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars);
    }
    extract($this->_ci_cached_vars)

Если я правильно понял, вы должны сделать это, к сожалению, так:

$this->load->view('test_view', array('what' => ''));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...