Fatal error: Smarty error: 'obj' is not a registered object

iSlayter

Новичок
Fatal error: Smarty error: 'obj' is not a registered object

Столкнулся с такой проблемой, в недоумении чешу репу, ведь четко написано:
PHP:
require_once(ABSPATH . 'class/mysql.class.php');
$mysql   = new mysql();
$mysql->connect();
$smarty->register_object('mysql', $mysql,null,false);
Кроме того, есть
PHP:
function smarty_function_component($params, &$smarty) { 
    $mysql = &$smarty->get_registered_object('mysql'); 
    
    if (empty($params['name'])) { 
        $params['name'] = 'news'; 
    } 
    if (is_file(ABSPATH . '/components/' . $params['name'] . '/index.php')) { 
        require(ABSPATH . '/components/' . $params['name'] . '/index.php'); 
    } else { 
        echo 'Компонент <strong>' . $params['name'] . '</strong> не был найден!'; 
    } 
    unset($mysql); 
}
Ну и как результат работы:

Fatal error: Smarty error: 'mysql' is not a registered object in /home/forexawc/public_html/class/smarty/Smarty.class.php on line 1092
Вопрос банален, как выйти из ситуации?

-~{}~ 13.04.08 23:46:

print_r($this->_reg_objects);

Array ( ) .

Чисто. wtf?
 

kode

never knows best
имхо проще

$smarty->assign('mysql',$mysql);
$smarty->get_template_vars('mysql');

это раз.

два: что тебе мешает самому посмотреть в исходниках смарти почему так происходит? Лень?

три: unregister_object случаем не используешь?
 

iSlayter

Новичок
Извинения, ошибки нет на самом деле. Не тот конфиг подключал, в том, к-й подключал не было register_object.

Раз - пока ещё не понял что не тот конфиг подключаю попытался сделать как ты предложил, не получилось. Выдавал ошибку на отсутствие вызванного метода ;)

Два - смотрел, print_r($this->_reg_objects) же сказал что пуст.

Три - не пользуюсь.

Всё равно спасибо за ответы!
 

kode

never knows best
а вобже такой критичный обьект как БД Смарти скармливать нельзя (несекурно и избыточно) - есть такой паттерн, Registry называется

class Registry {
private static $instances = array();

public static function set($name,$object){
self::$instances[$name] = $object;
}

public static function get($name){
return self::$instances[$name];
}

}

Registry::set('mysql',$mysql);

$mysql = Registry::get('mysql');

либо синглтон (что ИМХО неправильно)
 

iSlayter

Новичок
kode, знаю, но ведь свой старый код поддерживать как-то надо... а за его переписку мне, естественно, никто не заплатит.
 
Сверху