При на расширенной настройке CDataColumn вызывается CComponent ::evaluateExpression($_expression_,$_data_=array()), который отваливается, если в $_expression_передавать не string или array, а функцию созданную при помощи create_function.
PHP вываливает что-то вроде Warning: Unexpected character in input: ' in /var/www/yii/framework/base/CComponent.php(612) : eval()'d code on line 1
Код: Выделить всё
public function actionTest()
{
$func = create_function('$data', '{print_r($data);}');
$this->evaluateExpression($func);
}
Код: Выделить всё
public function evaluateExpression($_expression_,$_data_=array())
{
if(is_string($_expression_))
{
extract($_data_);
return eval('return '.$_expression_.';');
}
else
{
$_data_[]=$this;
return call_user_func_array($_expression_, $_data_);
}
}
Дело в том, что функция, созданная через create_function ( предположительно и анонимные тоже) являются хоть и callable, но все таки типом string.
Поэтому if(is_string($_expression_)) срабатывает и eval пытается вывести функцию, а не вызвать ее.
Я вот никак и не пойму это баг или фича. Мол в случае с CGridView юзай наследование от форматеров, а не какие-то там лябда-функции)