0

我正在尝试在 Zend Framework 中创建一个表视图助手,它需要一个模型数组并生成一个显示模型属性的 html 表。

用户可以添加额外的列来显示更新、删除模型等操作。

所以用户可以添加这样的字符串

  $columnContent =   '<a href=\'update/$item[id]\'>update</a>' ; 

请注意,我使用简单的引号来缓存稍后要评估的字符串

我的问题是,以后有没有办法在上下文中评估该字符串?

所以我需要模仿 PHP 中字符串的 " " 行为,谢谢。

就像是 :

// 在上下文中,其中 $item 是模型数组中的一行:

$myVar = evaluatemyString($columnContent);

编辑 :

我不是在寻找在我的情况下不起作用的 eval 函数,(我认为)。

编辑 2:

我也需要将结果放入变量中。

4

3 回答 3

0

改用“模板”(引号是有意的)。看看intl,尤其是messageformatter。还有很好的旧printf()功能(包括sprintf()等等)

于 2012-04-16T19:59:57.480 回答
0

PHP中的eval函数

eval($columnContent);
于 2012-04-16T19:44:41.813 回答
0

这是一个简单的 UTF-8 安全字符串插值示例。正则表达式强制使用以下规则的变量:

  1. 以@为前缀
  2. object:property notation(表示关联数组键“对象”,其值也是关联数组)

换句话说,而不是像这样的变量:$item[id] 你将拥有像这样的变量:@user:id

<?php

// <a href="update/@user:name">update</a>
//$template = '<a href="update/@user:name">update</a>';

// <a href="update/500">update</a>
$template = '<a href="update/@user:id">update</a>';

// fixture data
$db[499]  = array('user' => array('id' => 499));
$db[500]  = array('user' => array('id' => 500));

// select record w/ ID = 500
$context  = $db[500];

// string interpolation
$merged = preg_replace_callback('/@(?:(?P<object>[^:]+):)(?P<property>[\w][\w\d]*){1}/iu', function($matches) use($context) {
  $object   = $matches['object'];
  $property = $matches['property'];

  return isset($context[$object][$property])
       ? $context[$object][$property]
       : $matches[0];
}, $template);


echo "TEMPLATE: ${template}", PHP_EOL;
echo "MERGED  : ${merged}",   PHP_EOL;
于 2012-04-16T23:49:29.653 回答