fuelphp使って分からなかったこと
fuelphp使うって言ってもmodelにmysql使ったりしてないんでイレギュラーな
感じなんですけど。
以下に分からなかったことなど
1,modelの検索メソッドがクラスメソッド
検索条件を検索メソッドに渡してレコードオブジェクトを受け取るんだから別に
インスタンスメソッドである必要はないんだけど、じゃぁ返ってきたモノは
ただの連想配列なのかモデルオブジェクトの塊なのか…
昔、Javaを少し自習した時にレコードオブジェクトのクラスとオブジェクトの塊を保持する
クラスが別になる書き方があって、自分にはその方がしっくり来るんだけど、多分塊を保持
するクラスが余計っていう考えなのだろうか。
何にしっくりこないかというと、モデルクラスの1インスタンスが1レコードオブジェクトなのか
その塊(1個以上)が1インスタンスなのかという事。
Model_Crudのメソッド見てるとhas_next()とかあるから、1個以上のレコードオブジェクトを
保持するイテレータオブジェクトが1インスタンスなのかなーって思う。でもそうすると、fuelphp
においては1レコードオブジェクトってのは1モデルインスタンスが保持するただの連想配列なのか
な?
このあたりは、PHPの他のフレームワーク勉強したり他の言語のフレームワーク勉強していくしか
ないかな。
2,FieldSetクラスという便利なものの中のcheckboxの名前の付け方
これは多分自分の学習が足りないだけなんだと思うけど、PHPでinputフォームのチェックボックス
を複数用意する時、name属性をname=”◯◯[]”とかにして受け取ったPHPで値を配列で扱うんだけ
ど、fuelphpのFieldSetクラスから生成したcheckboxがname属性をname=”◯◯[i]”って[]の中
に数字を入れてくるんです。受け取るPHP側では配列として受け取れるぽいんだけど、fuelphpの
Validationでこのチェックボックスグループらのどれか1つにはチェックしていること!みたいな
事が出来ない。あと、jQueryのvalidationプラグインが動かない。別のものとして扱ってしまう。
core/classes/foeldset/の中にあるファイルのcheckboxのフォームの名前属性を作る部分を直接
書き換えて(本当はappフォルダにコピーするべき)使っている。
3,FieldSetオブジェクトのフォームオブジェクトのラベル出力の時に出力されるラベル要素に
クラス(htmlのclass)を追加する手段が分からない。
こいつ、checkboxやradioのグループ出力する場合はタグ出力しないんだぜ。意味不明。 親要素のclassに装飾の指定しても無視されたりするし、ホンマむかちく(ただの勉強不足)。
やりたかったのは、必須入力のフォーム要素にはラベル名称を赤字にしたかったんだけど、css適用
されなくて、仕方なく、requiredの場合出力されるデフォルト「*」のやつを「(必須)」てかえて
それを赤字にした(requiredの時に出力される奴はlabel要素外)。
4,単にどこに何を書くかがまだ理解できていない。
controllerのactionメソッド内にloginチェックの詳細処理を書いてるんだけど、そこは外に
切り出すべきなんじゃないの?とかactionメソッド内でのみ使う提携処理&ちょっと複雑みたいな
のは外に切り出すべきなんだろうけど、それは別のcomponentクラスとかにクラスメソッドとして
出すべきなのか、同じcontrollクラスのprivateメソッドとして切り出すべきなのか。今は別の
クラスでも使う汎用的なものはcomponentクラスに、特定のactionメソッドからのみ呼び出すよう
なものは同じクラス内のprivateメソッドにしてる。actionメソッド内の記述がシンプルになれば
privateメソッド増産してcontrollerクラス内の行数は多くても良いのか、別クラスにどんどん
出していくべきなのか。でも、publicにしたくないメソッドとかあるんですよ。
あとはやっぱりmodelとViewModelとView。検索して取り出したレコードオブジェクトを展開する
のはViewModelなのかViewでやるのか、Pagenationは?formオブジェクトにデータぶっこむのは?
とか分からんですし、ViewModelとViewの連携のさせ方とかまだ理解できていない。
5,やっぱりPHPのクロージャの使い所が分からない
JavaScriptは分かるんですよ。callbackとかその時だけの処理をそこに直接書くとか、function
定義しちゃうとグローバル領域にはいっちゃうから変数の中にいれといて、特定の処理の時に呼び出す
とかね。
でもPHPてクラスメソッドとかインスタンスメソッドとか定義してるわけじゃないですか、だから
JavaScriptと同じ用途ってない気がして…ちょっとだけViewファイルの中で書いたりもしたけれど、
Helper作る程でもない処理専用って事?後は再帰定義のcallbaclくらい?よく分からんです。