askeetチュートリアル symfonyでのyamlの使い方

muroiです。
今日はaskeetチュートリアルをやりながら、ちょっと気になって調べてみたもの書きたいと思います。
今回はYAMLの挙動と『SF○○』で始まる定数の定義について調べながら色々と試していきました。

まずは最初にaskeet『16日目』を見てください。
この日はお休みというタイトルで、『ここまでよく頑張りました。少し休みなさい。・・・あとリポジトリは少しだけ変えておくから後で確認しておいてね。』という内容で特に何もなく終わったのですがリポジトリを見てみると・・大幅な変更が入っていました!
モジュールが追加されていたり機能が追加されたり、リファクタリングがされていたりと・・・あきらかにお休みというタイトルでごまかしています。
詳しくは『Askeet Tutorial 16日目で何が起こっているのか?』をご覧ください。

さて、とりあえずここは勉強だという事で、いつのまにか追加されていたモジュール『content』が何かを調べて実装していきました。
調べた結果このcontentは、askeetのトップページ右上にある『about』の処理を実装しているものでした。
about
これですね、今まではリンクをクリックしてもただトップに戻ってしまうだけのものでした。

とりあえず実装をという事で、モジュールを追加してリポジトリを参考にしながら実装していったのですが、なかなかうまくいかず・・・、調べた結果contentモジュールのactionがおかしいという所まで分かり、中身を見てみると以下のようになっていました。
content_action_before
テキストファイルが見つからないってエラーが出ているのですけどこの『SF_DATA_DIR』とは何だろう・・・、大文字だからきっと定数なのかな?って事で定義されている場所を探すため様々なクラスを探してみました。
結果・・・見つからず。
なぜだろうと思いながら検索してみるとsymfonyの定数定義はYAMLファイルを元に作られるという事がわかりました! ・・・最初から検索するべきでした。
という事で調べた結果を元にsymfonyのconfigを見ていくと気になるソースコードを見つける事ができました。
constants
これはsymfonyディレクトリのconfigにあるものの一部です。
またこれは、sfConfigのgetメソッドを使う事で中身を取り出す事ができます。という事で前回ファイルが見つからないとエラーが出ていた部分を直してみました。
content_action_after

変更前

$this->html = markdown(file_get_contents(SF_DATA_DIR.'/content/about.txt'));

変更後

$this->html = markdown(file_get_contents(sfConfig::get('sf_data_dir').'/content/about.txt'));

大文字が解決した訳ではないのですが、上記のようにsfConfig::get()を使う事で呼び出しできるという事を知り、呼び出しには成功できました!
以下aboutがちゃんと表示された状態です
about_result

ここまででYAMLがどのように使われているのか少しずつ知る事ができてきました。
YAMLを使ってプロジェクト全体で利用できる定数を作成する方法も知る事ができました。
例えば以下の様なYAMLがあると・・・
settings
(ちなみにこのYAMLはプロジェクト以下のconfig/settings.ymlの内容です)

これでカレーの値段の値が入っている定数を呼ぶ際は

sfConfig::get(’sf_curry_price’);

と記述する事で取り出せます。
なるほど・・・だんだんとYAMLの使い方と動きがわかってきました。

今回はエラーが出て気になったので調べていったのですが、エラーが出る事により色々と知る事ができました!
どんどん気になった事があれば勉強してsymfonyをマスターしたいです。

4 件のコメント so far »

  1. by スタートアップ研修記 » Askeet Tutorial aboutを表示する!, on 08.29.08 @ 4:52 PM

     

    [...] content/actions.class.phpにて、indexアクションを消去し、aboutアクションを追加します。 muroiによる、あげたてほやほやのyamlについての記事を参考にしながら、tutorialのコードに一部変更を行います。 [...]

  2. by ichikawa, on 09.01.08 @ 10:09 AM

     

    yamlとsfConfig::get()は5日目のページャの機能のときもありましたね。しかしあのときはapp.ymlでした。名前からして、configディレクトリ以下のところすべてを参照しているのでしょうかね?

  3. by muroi, on 09.01.08 @ 10:30 AM

     

    コメントありがとうございます。
    config以下のyamlファイルは読み込まれる際に、一度PHPに変換されているそうです。一部のファイルはコードからアクセスが出来るという事なのですが詳しくわからないのでもっと勉強します!

    あと調べてみたのですけどsfConfig::get()での取り出しなんですが、上記の例ではsettings.ymlなんで『sf_』となっているのですが接頭辞は設定ファイル名に関係しているそうです。
    app.ymlなら『app_』、module.ymlは『mod_』といった具合にsfConfig::get()で取り出す事ができるみたいです。

  4. by hasumi, on 09.02.08 @ 10:26 AM

     

    sfConfigの中身の全てはsfConfig::getAll()でみることができるので、どんな値が取得できるのか一度把握しておくのも良いかと思います。気が向いたらsfConfigクラスのソースコードも読んでみて下さい、特に難しいことはしていないようなので。

Comment RSS · TrackBack URI

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree