memocon プログラミングのメモや物欲日記、雑記等

FuelPHPで1サイトを作ってみて気が付いた点など

2012年12月21日 00時13分

FuelPHP Advent Calendar 2012(#FuelPHPAdvent2012)21日目です。

前日の記事は@haltcompilerさんFuelPHPのormを複数DBに対応させる方法でした。

本日は私が初めてFuelPHPを使った時に、躓いたことの解決法を焦点を絞らずに書いていきたいと思います。

  • fieldsetでform出力したいけど見た目は場所によって変更したい

    fieldsetでフィールドの定義をまとめて、表示はViewで自在に配置したい。
    結構あるケースだと思います。

    そんな時はViewで個別にfield単位で表示して、その際にtemplateを設定すれば入力欄のみだったりエラーメッセージのみを取得できます。

    こんな感じで出力されます。
    formの描画イメージ

    config/form.phpを参考に、使える置換文字列をset_templateで設定することでその項目の必要な部分のみ描画できます。
    動的に出力されるタグに属性を追加したい場合はset_attributeで追加します。

    私は上の記述方法が結構好きなのですが、項目が多くなってきたりするとViewがとても残念なことになってくるのでもっと綺麗に書きたいと思うのがプログラマの性です。
    そんな時はadvent calendar7日目の@omoonさんの記事等を参考にしてfieldset自体を拡張するのがお勧めです。

  • phpunitすると文字化ける(windows)

    Windows環境下でoil testすると結果が下のように出てきて悩んでました。

    これは文字化けというよりはカラー用のエスケープシーケンスがそのまま出ているようで、utf8がどうのとか文字コードを調べてしまうとなかなか解決に辿り着けません。以下を修正してください。

    COREPATH/phpunit.xml 3行目

  • クラスの名前空間はFuelPHPのスタイルに合わせて絶対でなく相対で

    IDEの自動補完があるのでついついクラス名をルートから完全修飾したくなりますが、これが挙動にも影響を与えるケースがあります。

    fuelphp.jp | Google グループ コントローラからのレスポンスのContent-Typeを変更できません

    郷に入っては郷に従えという諺に従いましょう。

    クラス名だけで自動補完をするためのIDE用定義を生成するスクリプトを@kenji_sさんが公開してくださっているので、ここはありがたく使用させていただきます。

    A Day in Serenity @ kenjis | Eclipse で FuelPHP のコード補完を行わせる冴えたやり方

    Windowsで使用する場合は以下を修正してください。

    関数の41行目

  • fieldsetの選択項目でauto_id_prefixが2重に付く

    デフォルトの設定だと’form_’になっているauto_id_prefixの値がradioなどの選択項目で<label for=’form_form_xxxxx’>となるバグに遭遇しました。(v1.4)

    調べてみるとCOREPATH/classes/fieldset/field.phpの以下が原因だったので修正。

    そしてpull requestを送っちゃうぞ〜と意気揚々とgithubを確認してみると、そこには既に修正済みのコードが掲載されていました。
    gitで最新取ってる人には無縁の悩みだったようです。

  • テキストフィールドに0を設定しても空になる

    タイトルのまんまです。(v1.4)

    Model側

    View側

    とやっても空白なテキストフィールドが表示されてしまいました。(v1.4)

    これはCORE/base.phpのarray_to_attrという関数内での条件が原因となっていました。
    案の定、github上では修正されておりましたので修正内容をありがたくマージしました。

    prefixの件と合わせて本来はgit使って最新版使ってると悩まないことなのかもしれません。
    ですが私のように公式のzipアーカイブをダウンロードして、これを基に実装を進めるような人がフレームワーク側のバグっぽい現象に遭遇したら最初にgithubで最新のソースを確認してみることをお勧めします。

  • 別DBのテーブルをModel_Crudで参照する

    APPPATH/config/db.phpに複数の接続情報を用意すると、Model別に使用する設定を変えることが出来ます。

    まずは接続情報をconfigに追加します。

    APPPATH/config/db.php

    APPPATH/config/各種ステージ/db.php

    後はModel_Crud側で$_connectionプロパティを設定します。

    これで設定完了です。
    $_connectionを省略した際はactiveで示された設定が使用されます。

以上、他の日の記事と微妙に被ってる内容の多い21日目でした。

明日は@ts_asanoさんQueryBuilderで小難しいSELECT文を書くためのノウハウです。
表題からして素敵ですね。お楽しみに♪