在symfony YAML中使用php代码作为字符串值

问题描述:

我想创建一些带有值的YAML密钥 - php中的代码。但是这个代码不应该被执行 - 我想用它作为值本身。我怎样才能做到这一点?在symfony YAML中使用php代码作为字符串值

例子:

somekey: <?php echo 1; ?> 

这行不应该被认定为somekey: 1解析后 - 我想为somekey<?php echo 1; ?>获得价值。

更新:

我想用它来存储在数据库中的一些代码(与fixtures.yml),然后加载它和基于php的模板使用。

+1

远投...... somekey:'?> – Tom 2010-12-20 23:07:26

我发明了我自己的解决方案。它看起来很糟糕,但工程:

somekey: "<?php echo '<?php echo 1; ?>'; ?>" 

您还没有指定何时(如果曾经)您想让php代码实际执行。所以假设你永远不希望它来执行,你就值输出到浏览器的地方,尽量&lt;?php echo 1; ?&gt;(或HTML转义任何实际值)

你可以将其存储为:

somekey: [?php echo 1; ?] 

并在需要使用模板(加载yaml的层可以完成工作)之前用适当的php标记替换[?php?]。

我一直在使用灯具进行迁移的目的,也需要使用PHP来生成适当的yaml文件。我的工作解决此问题做这样的事情:那么symfony1.2版本这是工作很好

<?php $handle=fopen(sfConfig::get('sf_data_dir')."/fixtures/csv/file.csv","r")?> 
<?php fgetcsv($handle,0, ";"); ?> 
<?php $i=100; ?> 
<?php while (($data = fgetcsv($handle,0, ";")) !== false):?> 
<?php 
$code=trim($data[0]); 
$user=trim($data[1]); 
$criteria = new Criteria(); 
$criteria->add(ObjectPeer::CODE, $code); 
$unit= objectPeer::doSelectOne($criteria, $error); 
if (is_null($unit) || empty($unit)) 
    continue; 
?> 
    auto_generated_label_<?php echo 'value'.$i; $i++?>: 

    attribute_1: <?php echo $user ?> 

    attribute_2: <?php echo $unit->getId() ?> 

<?php endwhile ?> 

,记住,永远留空白像每个YAML实体之间类似的例子中,和尊重缩进用PHP打交道时在YAML文件embebbed,因为这些空行不会在那里当YAML解析读它,所以如果你不把它们,你可以用somethink就像结束了:

auto_generated_label_1:attribute_1:asdasdasd attribute_2:1233123

祝你好运!

Symfony的1.0:

version: <?php echo file_get_contents('1.0/VERSION')."\n" ?> 

的Symfony 1.x中:

version: "<?php echo file_get_contents('1.1/VERSION') ?>"