2012-04-16 4 views
0

私はZend Frameworkでテーブルビューヘルパーを作成しようとしていますが、モデルの配列をとり、モデルプロパティを表示するhtmlテーブルを生成します。""動作を模倣するPHP関数はありますか?

ユーザーは、更新、削除モデル、などの操作を表示するために追加の列を追加できます。

私は後で

私の問題は、で評価される文字列をキャッシュするために、単純な引用符を使用すること

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

ノートがそれを評価する方法があるようなので、ユーザは、文字列を追加することができますコンテキスト内の文字列、後で?

私はPHPの文字列の動作を模倣する必要があります。

のようなもの:$アイテムはモデルの配列の行でコンテキスト内

//:

$myVar = evaluatemyString($columnContent); 

EDIT:

私はevalを探していませんよ私の場合は機能しない機能(私は思う)。

EDIT 2:

私はあまりにも変数に結果を配置する必要があります。 PHP

eval($columnContent); 
+7

Eeeeeeeeeeeeeeee:$item[id] はあなたのような変数を持っていますk。あなたは間違ったsooooooooooの外観をしたいですか? – PeeHaa

+2

Eeeeeeek(これは趣味の問題です)だけでなく、これまでに(PHPの変数値に動的にアクセスするPHPの)重複の可能性があります(回答しています)(http://stackoverflow.com/questions/8356464/php-dynamically -accessing-variable-value) – hakre

+0

私はテンプレートエンジンをdeveloppしたいだけで、 "eval"と同じではありません。文字列の "レンダリング"を除外したいだけです。 – mpm

答えて

0

eval機能。 intl、特にmessageformatterをご覧ください。また、良い古いprintf()関数(sprintf()などにあります)

+3

あなたはその評価呼び出しが何をすると思いますか?私は、それはあなたにエラーを与えて、それはすべてです。 – hakre

+0

eval does notは私がしたいことと一緒に働きます。 – mpm

+0

私は文字列の内容を直接印刷したくないので、変数に入れる必要があります。 – mpm

0

使用 "テンプレート"(引用符が意図されている)の代わりに中

+0

printf/sprintfは私の場合は動作しませんが、テンプレートを見ていきますが、基本的には2つの選択肢があり、コールバックを使うのですが、ヘルパーを呼び出すたびにコールバックを書く必要はありません。ヘルパーを書くポイント。 – mpm

0

ここでは、単純なUTF-8安全な文字列補間の例を示します。正規表現は、次の規則の変数を強制:プロパティ表記(その値も連想配列である連想配列のキー「オブジェクト」を意味する)で

  • @オブジェクト接頭辞

    1. 代わりのような変数のつまり、:@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; 
      
    関連する問題