CodeIgniter распределял данные между вызовами загрузки-> просмотра - PullRequest
1 голос
/ 24 февраля 2011

Рассмотрим представление с именем render_thing, которое я загружаю из контроллера следующим образом:

$html = $this->load->view(
  'render_thing',                   
  array(
    'someParam' => $globalParam
    'permissionMode' => 'guest'
  ),
  true
);
log($html);

Позже в том же контроллере я снова загружаю представление, за исключением того, что не перезаписываю необязательный параметр accessMode. Я предполагаю, что в коде представления, $permissionMode будет unset.

$moreHtml = $this->load->view(
  'render_thing',                   
  array(
    'someParam' => 'blablabla'
  ),
  true
);

Однако в коде представления render_thing при втором вызове $permissionMode по-прежнему 'guest'. Можете ли вы сказать мне, что здесь происходит?

Спасибо !!!

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Из Loader.php, Loader::_ci_load в источнике CodeIgniter ...

    /*
     * 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);

Так вот почему этот параметр все еще установлен. load_vars не метод, но vars; Проблема в том, что он не предоставляет средства для удаления кэша. Поэтому, поскольку CodeIgniter по-прежнему совместим с PHP4, вы всегда можете сделать это: $this->load->_ci_cached_vars = array();.

1 голос
/ 03 мая 2012

У меня была такая же проблема, и я понял проблему в Loader.php следующим образом:

/*
* 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);
}else{
    $this->load->_ci_cached_vars = array();
}
extract($this->_ci_cached_vars);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...