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

时间:2010-12-20 04:04:45

标签: php parsing symfony1 yaml

我想用值创建一些YAML键 - php中的代码。但是这个代码不应该被执行 - 我想将它用作值本身。我怎么能这样做?

示例:

somekey: <?php echo 1; ?>

解析后不应将此行识别为somekey: 1 - 我希望somekey键的值为<?php echo 1; ?>

更新

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

5 个答案:

答案 0 :(得分:2)

我发明了自己的解决方案。看起来很糟糕但有效:

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

答案 1 :(得分:1)

您可以将其存储为:

somekey: [?php echo 1; ?]

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

答案 2 :(得分:1)

我一直在使用灯具进行迁移,还需要使用php来生成正确的yaml文件。我解决这个问题的方法是:

<?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 ?>

所以在symfony 1.2中这很好用,并记住,总是在每个yaml实体之间留下一个空白,就像在示例中一样,并且在处理php嵌入yaml文件时尊重缩进,因为那些空行不会在那里当yaml解析读取它时,所以如果你不把它们放在一起,你可能最终会想到:

auto_generated_label_1:attribute_1:asdasdasd attribute_2:1233123

祝你好运!

答案 3 :(得分:0)

您尚未指定何时(如果有)您希望php代码实际执行。因此,假设您从未希望它执行并且您将值输出到某个地方的浏览器,请尝试&lt;?php echo 1; ?&gt;(或HTML转义任何实际值)

答案 4 :(得分:0)

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') ?>"