自分用のあれ 暫定メモ

自動設定

index.php?action=ModuleName を想定

  • 設定ファイル
    • ModuleName.ini
    • 無ければモジュール名がそのままアクションクラス名となる
  • アクションクラス
    • ModuleName.class.php
    • 無ければアクションクラス名がそのままテンプレートファイル名となる
  • テンプレート
    • ModuleName.html
    • 必須

クラス変数

アクションやフィルタやコンポーネント(特に違いはないただのクラス)のメンバ変数は自動的に値が設定される。

  • 設定ファイルの[properties]セクション
  • 変数名が_[A-Z]で始まる場合はコンポーネント
    • 生成されていなければ生成

アクションクラスとフィルタクラスは更に、リクエスト変数がアンダースコアから始まらない変数に設定される。



同じ名前の変数は値が上書きされる。


フィルタからアクションへ値を使い回したい場合は、リクエストクラスに値を入れると自動的に設定される。
またはコンポーネントなどを通じて明示的に取得する。



フレームワークから呼び出されるクラスを作る時に変数名について唯一の注意点は、自動的に書き換えたくない変数は_[a-z](アンダースコアの後に小文字で始まる)という名前を使用する。


メソッド名についても、自動的に実行しない場合はアンダースコアから始める。


モジュール設定iniファイル

;; index.php?action=ModuleName
[module]
;; ModuleName->execute()が実行される
module = ModuleName

[filters]
;; ActionFilter->actionFilter()が実行される
action1 = ActionFilter
;; ActionFilter->PreFilter()が実行される
action2 = ActionFilter.PreFilter

view1 = ViewFilter
view2 = ActionFilter.postFilter

[properties]
_userId = 1

[methods]
init =
getConnection = dbname, username

[results]
;; index.php?action=ErrorViewと同じ意味
error = ErrorView
transfer = OtherModule

[DIContainer]
DB = DB.dicon.ini
;; index.php?action=OtherModule
[module]
;; ModuleName->OtherModule()が実行される
class = ModuleName

[filters]
;; ModuleNameの設定ファイルにあるフィルタが実行された後、
;; ModuleName->OtherModule_actionFilter()が実行される
;; 特に命名規則は無いので自分で考える
action1 = ModuleName.OtherModule_actionFilter

[results]
;; index.php?action=ModuleNameと同じ意味
;; 値の引き継ぎはRequestクラスやコンテナで
success = ModuleName
;; ModuleNameの設定ファイルで設定したerrorを上書き
error = OtherErrorView


設定は上層フィルタから順に上書きされる。


[module]セクションの値とURLの引数が違う場合はその値をモジュールとして処理を行う。キーは module と class があり、moduleは他からの転送を受け付ける。他から呼び出されたクラスは実行関数が呼び出し元のモジュール名となる。





DIContainer設定iniファイル

[main]
component = DB
class     = MyDB
path      = MyDB.class.php

[properties]
dbname = mydb

[methods]
conn =


[DIContainer]
Other = OtherComponent.dicon.ini

[main]セクションにそれぞれコンポーネント名、クラス名、クラスファイルパスを記述する。


その他のセクションはモジュール設定と同じ





取り敢えず進捗状況をまとめてみたらこんな感じになった。


・・・・・。



guessworkの動作とMapleのソースで勉強しながら作ったから当然の結果だよね・・・。




やりたかったのはフィルタもアクションもごちゃ混ぜにしたかったってこと。
あとは設定ファイル無しで連鎖的なコンポーネントのメンバ変数代入。


取り敢えず今のところコンポーネントを5コほど使ってるけど、設定ファイルはDB用の文字列が書いてあるコンポーネント用の設定ファイル1つのみ。

うーんすっきり。



逆にアクションの方は設定ファイルの方が多くなった。
設定ファイルレスも出来るけど、どちらかというとアクションクラスレス?いや、ただ他のアクションの関数呼んでるだけなんだけど・・。




あぁ、上の方でDIContainerとか書いてあるけど、単にメンバ変数を設定したかっただけでDIContainerを意識して作ったわけじゃないからこの名前はまずいよなぁ。