Hatena::ブログ(Diary)

daffy log このページをアンテナに追加 RSSフィード

2009-09-22

どこでも使いたくなる共通的な処理をどこに書こうか?

| どこでも使いたくなる共通的な処理をどこに書こうか?を含むブックマーク どこでも使いたくなる共通的な処理をどこに書こうか?のブックマークコメント

という事に迷った。

オンラインマニュアルを読んだ限り、

となっている。

どちらでも使いたいような処理はどこで書いたら良いのだろう。「モデルコンポーネントを使うことはできない」とは明示的には書いてないけど、モデルの中でコンポーネントを使う - 酔いどれの徒然を拝見させてもらったところ、ちょっと裏技っぽい。

で考えた方法が以下のとおり。

  1. vendors配下に普通のPHPクラスとして作成
  2. コンポーネントで上のファイルをApp:import('Vendor')する
  3. 委譲メソッドを大量に書く

これで

$this->MyComponent->method();

と実行できる。

委譲メソッドを書きたくないなら、コンポーネントでvendors配下のクラスをnewして、パブリック変数に持っておけば

$this->MyComponent->vendors->method();

と、できるかもしれない。

今、どうしてもコントローラでバリデートしたいので、幾つかのバリデータをvendors配下のクラスに作って使っている。たぶん、モデルで使いたくなったときにも大丈夫だろう。

まあ、もちろん全部vendors配下に普通のクラスで作れば?という話もあるな。