yaml形式のデータをfor文で大量生成

symfonyではpropel-load-datayaml形式のデータをDBに読み込ませることができますが、次のようにテストデータをいくつも書き続けるのは面倒です。

article:
    article_1:
        id:
        author_id:  author_1
        subject:    タイトル1
        text:       本文1
 
    article_2:
        id:
        author_id:  author_2
        subject:    タイトル2
        text:       本文2
 
    article_3:
        id:
        author_id:  author_3
        subject:    タイトル3
        text:       本文3
(以下たくさん)

さらにスキーマに変更が加わって何十ヶ所も修正……となると大変なことになります。

yamlにはPHPコードを直接かけるので、for文で大量のデータを作るようにすると便利です。

article:
<?php for($i = 1; $i <= 100; $i++): ?>
    article_<?php echo $i ?>:
        id:
        author_id:  author_<?php echo $i ?> 
        subject:    タイトル<?php echo $i ?> 
        text:       本文<?php echo $i ?> 
<?php endfor; ?>

ここで注意点が1つあります。行末にPHPコードが来る場合(上記例ではauthor_id、subject、textの行)、「?>」と改行文字の間に半角空白を1つ入れておかないとうまく動きません。

というのは、「?>」直後の改行コードはPHPパーサが削除してしまうため、つぎのようにyaml文法としておかしくなってしまうからです。

article:
    article_1:
        id:
        author_id:  author_1        subject:    タイトル1        text:       本文1    article_2:
        id:
        author_id:  author_2        subject:    タイトル2        text:       本文2    article_3:
        id:
        author_id:  author_3        subject:    タイトル3        text:       本文3    article_4:
(以下省略)

半角空白を挟み込むことで、改行コードを正しく出力させることができます。

仕組みとしてはob_start()include()ob_get_clean()yamlファイルをPHPパーサにかけているだけなので、for文に限らずいろんなことができます。

Leave a Reply

Name (required)
Mail (will not be published) (required)

Your Comments:

Spam Protection by WP-SpamFree