我有一个名为get_variable的函数,它从数据库中获取变量的值。
让我们说我的变量(存储在数据库中)的值类似于:"我喜欢$ fruit"
我想把这个字符串传递给我的视图,将WITH $ fruit翻译成正确的值。
我有以下设置(下面的伪代码):
$details['fruit'] = 'apples';
$details['test'] = get_variable('my_variable_name');
$var = $CI->load->view('viewname',$details,TRUE);
问题是我的视图中输出的内容($ var)是"我喜欢$ fruit"
我想要的是"我喜欢苹果"
我觉得我在这里错过了一步,也许是变量变量? (http://php.net/manual/en/language.variables.variable.php),但不确定如何让它表现出来。任何见解都将不胜感激。
答案 0 :(得分:0)
如果您确定数据库中的变量是安全的(只有您可以更改它们),您可以像这样评估get变量函数中的代码:
function get_variable($var, $data = array())
{
// Here the code that gets the variable from the database
$db_var = 'I like $fruit';
extract($data);
$return = '';
eval('$return = "' . $db_var . '"');
return $return;
}
// And then use this in the controller:
$details['test'] = get_variable('my_variable_name', $details);
但是当其他人可以访问数据库变量时,你真的不想使用eval(实际上不是!)。而是使用某种形式的模板,例如“我喜欢%fruit%”,并使get_variable看起来像这样:
function get_variable($var, $data = array())
{
// Here the code that gets the variable from the database
$db_var = 'I like $fruit';
extract($data);
$return = $db_var;
foreach($data as $var => $value) {
$return = str_replace('%'.$var.'%', $value, $return);
}
return $return;
}
// And then use the same method in the controller:
$details['test'] = get_variable('my_variable_name', $details); // This makes all variables in details available in the database variable