mapleの最近のブログ記事


技術評論社さんから上記のムックを出すということで、このたび Maple の項を書かせていただきました。2006-07-07 発売予定になってますね。Maple の項では基本概要、詳細、ステップバイステップで進めるアプリケーション作成とページ数上では(あくまでページ数上で :p)結構なボリュームです。その他 Rails, Ethna, Catalyst, TurboGears と LL フレームワークの目白押しです。どうぞよろしくおねがいします。

一番初めの話では「4大フレームワーク」だったのにいつの間にか増えてます。つまりお得です。

core_Extension_FilterChainWithPrivate
Maple Core's FilterChain - Load maple filter from default directory (FILTER_DIR) and private filter directory (PRIVATE_FILTER_DIR).

o Usage

(1) Download and put file to maple directory.

(2) Change FilterChain service to this class in config/base.ini.

[FilterChain]
name = Extension_FilterChainWithPrivate
path = core/Extension/FilterChainWithPrivate.class.php

(3) Define PRIVATE_FILTER_DIR. (maybe, maple.inc.php.)

define('PRIVATE_FILTER_DIR', WEBAPP_DIR . '/filters');

(4) Put your application filter to "PRIVATE_FILTER_DIR"'s directory.


o Download
- core_Extension_FilterChainWithPrivate 1.0.0


以前に紹介した、アプリケーションごとにそのアプリケーションだけに適応するような Filter を設置するディレクトリを準備する hack ですが、最近はこのように FilterChain サービスそのものを別のものに切り替えて使用しています。

名前が少々長いし、これ以上の付加要素を追加する場合の FilterChain の名称に少々困りそうな感じ。今のところないので大丈夫ですが。

Filter_AssignToTemplate
- Assign variables, object to smarty template.

o Usage

* maple.ini
[AssingToTemplate]
foo = FOO      ;; literal assign
bar = ref:Bar  ;; object assign by ref. Bar is already in DIContainer

* example.tpl
{$foo}         {* print FOO *}
{$bar->baz()}  {* exec baz() in Bar class *}

o Download
- Filter_AssignToTemplate 1.0.0


テンプレートへ assign もしくは object の assign_by_ref を一気に行う Maple Filter「Filter_AssignToTemplate」を公開します。
超地味でやってることも知れてるものの、決まったオブジェクトをテンプレートまで一括で持ってこれる機構が Maple には無いので愛用してます。リテラルを定数的に持っていくなら Smarty 定数使ってますが。今なら Maple で使用できるテンプレートとして Pure PHP および HTML_Template_Flexy がありますが、それらを統括する API がないので(加えて私が Smarty 以外のテンプレートを使う需要がないので)Smarty 専用です。

なお PEAR Package として公開してますが、*今のところ* PEAR Installer で導入する利点は一切ありません。そのままブラウザで落としてね!

今年初めのセミナーでおーにしさんと

「なんだかんだと Maple でアプリを作ってきた上で出来た、汎用 Filter とか Validater とか、みんな持ってるよねえ。」

と話してたのを今更ながら思い出す。
続いて「定期的に公開していこうよ!」と話していたものの、その後の年度末進行で時間が取れず仕舞だったのですが、これからちょくちょくと出していこうかなと思ってます。あちらは見る限りかなりへこたれてる状態になってるので、気長に復活を待ちましょう。

DHTML ほとんど書けないよ〜という貴方も少し背伸びをすればみんな憧れ Ajax!という胡散臭い形でなんとかしてみようという試みです。

コードずらずらで長ったらしいのでご注意を。

maple の「設定ファイル」にはいろんな種類のものがある。そのうち Maple の動作そのものの決定する設定ファイル「maple.inc.php」。これに関して、実はずいぶん前に「他の設定ファイルは INI ファイルなのに、なんでこれだけ PHP で define なのか」などという話があった。

これ、もし INI ファイルによる設定にしようとすると、今までできていた当たり前のことができなくなるということがわかった。

define('MAPLE_DIR', BASE_DIR . '/maple');
define('WEBAPP_DIR', BASE_DIR . '/webapp');

define('FILTER_DIR', MAPLE_DIR . '/filter');
define('CONVERTER_DIR', MAPLE_DIR . '/converter');
define('VALIDATOR_DIR', MAPLE_DIR . '/validator');
define('LOGGER_DIR', MAPLE_DIR . '/logger');

定数としてある値を使って、次の定数を決定している。

これを INI とかの設定ファイルでやる場合、定数・変数という概念はプレーンテキストには存在しないので、定数扱いのものを読み込んで、プログラム側で eval するなり置換するなりの処理を行うか、定数・変数の概念をなくしてしまって全てを記述するか、設定ファイル側に特別なルールを持って記述するか、といったことが必要になってしまう。

Maple のこの設定ファイルは、おそらく Mojavi の設定ファイルを参考に採用した形式であろうけど、これが凄い理に適っているというか、しっくりきているものになっちゃっている。プレーンテキスト形式のなんらかに設定ファイルに変えるとなると、かなり面倒というか、今まで当たり前のことができなくなる可能性があるのでどうしたもんかとか思ってるわけです。

コメントに書いてましたがちょこっと長く、また面白みもあるのでエントリへ。

Maple: SD 3月号から 3.1.0 要素を足してみる

2.3. Action 名の命名規則

P.56 (2) の Action 命名ルールにおいて、以下のように読み替えてください。

旧:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Foo_Bar.class.php 」
新:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Bar.class.php 」

;; 個人的には modules/Foo/Bar.class.php になるものとばっかり


 

kunit / 2006-02-20 22:27 「modules/Foo/Bar.class.php」にしたいんですが、そうすると Foo_Bar と Foo_Baz が同じディレクトリにクラスを置くことになり、maple.ini が重なるんですよね・・・ これはもう3系の限界だと思って、ここまでにしてます。
 

言われてみれば確かにそのとおりだ!全然気づかなかった。

思いついてはいるでしょうが、action 名と共通の bar.ini、baz.ini という風にはどうなんでしょう?

foo_bar_baz というアクションなら

modules/

modules/Foo/
modules/Foo.ini

modules/Foo/Bar/
modules/Foo/Bar.ini

modules/Foo/Bar/Baz.class.php (action class Foo_Bar_Baz)
modules/Foo/Bar/Baz.ini

とでもすることで、コードは煩雑化するものの、各階層ごとに ini 設定も記述できるし、整理ができるような気がせんでもないです。
Action は最初のタイミングで既に決まっているので、foo, bar, baz の分割および異なったファイルを読むのは容易でしょうし。別途 module 全体にかかるような設定ファイルを modules/root.ini とか modules/maple.ini とでもしておけばいいでしょうが、
まあ、言われるとおり、3 系でやるとなると変化がでかすぎますわな。

この辺は generator で勝手にやってくれるようになった部分なので、このままでいこうが、いきなり変えようが、(下位互換とかはとりあえず考えないのであれば)、いろんな意味でどうとでもなる部分。ぱっと見 (ホントにぱっと見。さぼって grep すらしてない ;)) 関わる箇所は ConfigUtil, ActionChain の2つで、ここは base.ini で切り返れる箇所。うちでも patch とかなしでやろうと思えば、できますな。やろうと思えば。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちmapleカテゴリに属しているものが含まれています。

次のカテゴリはPieceです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01