蹴球研究所
どうすればサッカーボールを無回転で蹴る事ができるのか自身の体験をベースに、その方法を考察するためのブログです。

非グローバルフィルター
何か中途半端な仕様だとは思っていたが、3.2から追加された機能のようだ。

自分で改造するのも面倒だし、Migration Toolがないなど現状では色々不足している機能もまだまだあるのでAkelosを使った方がよさそうだ。

でもMapleはソースコードがすっきり書けるし、デバッガーで追うのも楽で良いと思うので今後に期待したい。

以下の出典はここ

-----------------------------
Hawkです。

GlobalFilterセクションによる指定が分かり難いのは
その通りだと私も思います。
そして木内さんが今回提案されたような形も、検討されたことはありました。
ではなぜ現状のような仕様になっているかというと、
ちょっとした"歴史的な事情"があるのです。

実は、そもそもフィルタの継承機能は、
作者kunitさんも想定していなかった、全くの偶然による産物でした。
それを「これは結構便利だぞ」と気付いた一部の人(私など)が、
概念を整理して、有用性をアピールして、
ようやく3.2で公式にサポートするに至った、というのが実状です。

そのため3.2開発の段階では、
あまり設定ファイルを複雑にするような形で導入するわけにはいかず、
3.1以前との互換性を最優先する形になりました。
果たして設定ファイルを複雑化するに値する機能なのかどうか、
検証する段階にあったということです。

ということなので、議論はまさにこれからです。
今回の提案がいただけたことで、少なくとも議論・検討していく段階には
入ったかと思うのですが、いかがでしょうか?>他の開発者の皆様

……
以下、内容についての返信です。
まず確認しておきたいのですが、

>> ## Global登録
>> [Filter at global]
>> ## Local登録(ディフォルトはこれ)
>> [Filter at local]

ここでいうglobalとは、3.2で言えば
「GlobalFilterセクションに指定した場合の動作」
もしくは
「最下層のmaple.iniで指定した場合の動作」
で、ConfigUtilsのメソッドで言えば
「_mergeOrAddによる登録」
で良いでしょうか。

そしてlocalとは、3.2で言えば
「GlobalFilterセクションが存在し、かつ指定されなかった場合の動作」
で、ConfigUtilsのメソッドで言えば
「__preserveや_mergeOrPreserveによる登録」
で良いでしょうか。

というのも、Maple3.1以前には後者のような概念は無く、
global/localのような区別も存在しなかったので……。
後者をlocalと呼ぶ、というのであれば、それはそれでOKです。
それを公式の呼び名にしてしまっても良いと思います。

それを踏まえての質問点です。

・[Filter at local:merge] がデフォルトとのことですが、
 そうなるとMaple 3.1とも3.2とも互換性がないことになります。
 互換性を保つべきかという議論はさておき、
 この認識で正しいでしょうか。

・最下層のmaple.iniについても [Filter at local:merge] が
 デフォルトなのでしょうか。
 最下層のmaple.iniはその性質上、localが意味を持たないと思われますが?

まあこのあたりはコードを見れば一目瞭然かも知れないので、
よろしければ添付ファイルでMLに送ってみてください。

--
Hawk : {
web site : http://blog.hawklab.jp/
}

テーマ:プログラミング - ジャンル:コンピュータ

Migration Tool
ディレクトリー構成を変更したい場合のマイグレーションツールはないようだ。

以下の出典はここ

-------------------------------------------------------
優しく・易しく? (2006-06-22 (木) 09:40:01)

以前、Migration Toolというか「フォルダ階層の移行ツール」の話をされていたと思うのですが、次期バージョンにバンドルされるものなのでしょうか?

mapleは、クラス名[action/compoment]命名規則が、フォルダ階層名[path]に則ったものなので、フォルダ名の変更や階層移動、整理を行おうとした場合に、クラス名、maple.ini、dicon.iniに直接影響が出てしまいます。

これらを「自動化」してくれるツールがあれば、非常に有用なものになると思っております。

generatorの中に含まれるのが良いのか?別のツールとして用意された方が良いのか?は、協議が必要だと思われますが「mapleって痒い所にも手が届くフレームワークだよね」って世間に認知されることを願っております。

非常にご多忙と存じますが、引き続き応援させていただいております。頑張ってください。

技術評論社から出版される、Software Design編集部が作成された「最新LLフレームワークエクスプローラ 5大フレームワーク徹底攻略」でのmapleの項も楽しみにしております。

どんな切り口で、記事にされているか?
また「今後のトレンドとしての部分」と「各フレームワークの本来の趣旨」が巧く記事にされていることを願っております。

テーマ:プログラミング - ジャンル:コンピュータ

2008年3月31日の風景
2008年3月31日の風景

今日は雨が降っています。3月も今日で終わりだと言うのに、まるで冬のような寒さとなりました。

テーマ:風景写真 - ジャンル:写真

2008年3月30日の風景
2008年3月30日の風景

今日は冷えています。満開の桜が長持ちするかもしれません。

テーマ:風景写真 - ジャンル:写真

2008年3月29日の風景
2008年3月29日の風景

今日は比較的に澄んだ空気の景色が撮れました。

テーマ:風景写真 - ジャンル:写真

2008年3月28日の風景
2008年3月28日の風景

近くの山が賑わってきました。

テーマ:風景写真 - ジャンル:写真

2008年3月27日の風景
2008年3月27日の風景


今の時間は冷たい北風が吹いていました。

テーマ:風景写真 - ジャンル:写真

2008年3月26日の風景
2008年3月26日の風景

今日は景色が霞んでいます。

テーマ:風景写真 - ジャンル:写真

2008年3月25日の風景
2008年3月25日の風景

今日は夏のような雲が広がる風景が撮れました。近くの山も桜の影響でしょうか。部分的に桃色になっているように見えました。

テーマ:風景写真 - ジャンル:写真

モバイル(クッキーを使用できない)端末でのリダイレクト
モバイル端末からもアクセス可能とするサイトを作る際に、リダイレクトしたい場合は、(Maple 3.2.0では)自動的にセッションIDを付加するようになっていないので、自分でセッションIDを付加してやる必要がある。
(セッションを使わない単純なサイトの場合は、以下の変更をする必要は必要ない。)

maple\filter\Filter_View.class.php(77L近辺)
 変更前:
  $response->setRedirect($url);

 変更後:
if(strlen(SID) > 0){
if(strchr($url, '?') === false)
$url .= '?' . SID;
else
$url .= '&' . SID;
}
  $response->setRedirect($url);

header()関数を実際にコールする所(ソースを追っていないのでリダイレクトにheader()を使っているかは不明だが)で、セッションIDを付加するなどしても良いが、別件で「Filter_View.class.php」を独自に修正していたので、上記のように変更する事にした。

テーマ:プログラミング - ジャンル:コンピュータ

2008年3月24日の風景
2008年3月24日の風景

今日は雨です。近くの山も山頂付近が良く見えません。

テーマ:風景写真 - ジャンル:写真

2008年3月23日の風景
2008年3月23日の風景

今日も暖かい日となりました。

テーマ:風景写真 - ジャンル:写真

2008年3月22日の風景
2008年3月22日の風景 

今日は暖かい日となりました。風景の方はちょっと霞んでいます。

テーマ:風景写真 - ジャンル:写真

2008年3月21日の風景
2008年3月21日の風景

今日も強風が吹いています。天気の方は雨が上がり薄日が差してきました。

テーマ:風景写真 - ジャンル:写真

2008年3月20日の風景
2008年3月20日の風景

今日は冷たい雨が降っています。東からの風が強く、余計に寒さを感じました。

テーマ:風景写真 - ジャンル:写真

2008年3月19日の風景
2008年3月19日の風景


今日は今にも雨が降り出しそうなお天気です。このところの陽気から比べると寒いのですが、もう冬の寒さという感じではありません。

テーマ:風景写真 - ジャンル:写真

2008年3月18日の風景
2008年3月18日の風景

今日も朝から暖かい日となりました。景色の方は、霞気味です。

テーマ:風景写真 - ジャンル:写真

ActionChainを使用した場合のエラーメッセージの表示方法
maple.ini を以下のように記述する事でビューを表示する代わりにActionChainの仕組みを利用して別のアクションを実行させる事ができる。


[View]
success = "action:user_list"


この場合、Smartyのテンプレートファイルに以下のような記述をすると、{$message}にアサインされるエラーメッセージは、ビューを表示したアクションクラスで設定したエラーのみとなる(ようだ)。


{errorList->getMessages assign=messages}


ビューを表示するアクションクラスの前に実行したアクションクラスで設定したエラーメッセージも表示したい場合は、以下のようにすれば{$message}に前記エラーメッセージがアサインされる。


{errorList->getAllMessages assign=messages}


mapleのサンプルコードでは、「getMessages」が使用されているが、ActionChainを使用する事を考えると「getAllMessages」を最初から使用しておいた方が良さそうだ。


テーマ:プログラミング - ジャンル:コンピュータ

2008年3月17日の風景
2008年3月17日の風景

今日は曇っていますが、寒くはありません。桜の開花が楽しみです。

テーマ:風景写真 - ジャンル:写真

2008年3月16日の風景
2008年3月16日の風景

今日も朝から暖かくなりました。景色はかなり霞んでいます。

テーマ:風景写真 - ジャンル:写真

2008年3月15日の風景
2008年3月15日の風景

今日は暖かい春の空気に包まれています。

テーマ:風景写真 - ジャンル:写真

2008年3月14日の風景
2008年3月14日の風景

今日は先ほどから本格的な雨が降り始めました。遠くの山は完全に視界から消えました。

テーマ:風景写真 - ジャンル:写真

2008年3月13日の風景
2008年3月13日の風景

今日は薄日が差しています。最近は霞んだ風景の日が続いています。

テーマ:風景写真 - ジャンル:写真

2008年3月12日の風景
2008年3月12日の風景

今日も昨日ほどではありませんが、かなり霞んでいました。

テーマ:風景写真 - ジャンル:写真

2008年3月11日の風景
2008年3月11日の風景

今の時間、晴れているのですが、とても視界が悪い状況です。不思議な感じの風景が撮れました。

テーマ:風景写真 - ジャンル:写真

Mapleとの違い
私が感じるMapleとの違いについては以下の通り。

(1)scaffoldを使うと、DBを操作する簡単なWEBアプリケーションを生成できる。

(2)dictionaryという機構があり、多言語対応が簡単にできるようになっている。

(3)フィルターの設定などは、基本的にソースコードに記述する必要がある。
 Mapleの場合は、maple.iniに適用するフィルターやそのパラメータを設定する方式であり、ソースコードとフィルター設定などの処理を分離できる。これによりソースコードをすっきりさせる事ができる。
 一方で、Mapleの場合、処理の修正を行おうとした場合、ソースとmaple.ini、さらにテンプレートファイルなどあちこち修正する必要があって面倒な面もある。

(4)テンプレートファイルの構文が複雑な気がする。
 AkelosはRailsをベースとしているので、仕方ないとは思うが、PHP, Rubyのタグが混在したERBライクなテンプレートファイルとなっている。
 これはデザインとシステムを分離して開発する場合、デザイナーさんにとってかなりの負担となるのと思われる。
 ERBライクなテンプレートファイルは、最終的にPHPファイルにコンパイルして実行しているようなので、もしかしたらSmartyなどのテンプレートエンジンと連携できるのかもしれないが調べてない。

(5)PHP4, PHP5の両方で動作する。
 Mapleも同様だがこれは良い。Zend Frameworkを使用したいと思っても、Zend Frameworkは、PHP5でしか動作しない(当時は、今は調べていない)ので、正直使いづらかった。今でもPHP4を使っているレンタルサーバーは多いので。

テーマ:プログラミング - ジャンル:コンピュータ

2008年3月10日の風景
2008年3月10日の風景

今日は久しぶりに本格的な雨が降っています。早春の冷たい雨となりました。

テーマ:風景写真 - ジャンル:写真

2008年3月9日の風景
2008年3月9日の風景

この数日は、日に日に暖かくなっています。風景は霞気味です。

テーマ:風景写真 - ジャンル:写真

flash
 リダイレクトした際に、遷移先の画面にエラーなどを表示するための変数として「flash」という変数がコントローラ内で使用できる。

 以下のように記述すると、遷移先の「index.tpl」で「Login failed.」と表示できる。

  $this->flash['notice'] = $this->t('Login failed.');
  $this->redirectTo(array('action' => 'index'));

 しかし例えば以下のように表示するテンプレートファイルは変えるが、URLを遷移先させない場合は「index.tpl」で「Login failed.」と表示できないので注意する必要がある。

  $this->flash['notice'] = $this->t('Login failed.');
  $this->render(array('action' => 'index'));

 「flash」はセッションを使用しているようであるが、単にセッション変数として登録しているのであれば、URLを遷移させなくても(遷移させた場合と同様に)「Login failed.」を表示できそうなものであるが表示できなかった。
 デバッガーでステップ実行すると、URLを遷移させなくても「Login failed.」が表示できてしまうので、仕組みを解明しようと思ったが、なんだか良く分からないので挫折した。

 あと、
   $this->render(array('action' => 'index'));

 と記述した場合、(thisであるuserコントローラの)レイアウトファイルが適用されなかったので、
   $this->render(array('action' => 'index', 'layout' => 'user'));

 と記述しレイアウトファイルが適用されるようにした。

テーマ:プログラミング - ジャンル:コンピュータ

フィルター
フィルターについては、こちらに詳しく記述されている。

フィルターで、 false をリターンするとフィルターチェインを途中で終了する事ができる。

generate で作成したコントローラは、「app/application_controller.php」が派生元となっているので、認証フィルターなどは、前記「application_controller.php」で設定しておくと良いと思われる。

認証フィルターをかけたくないコントローラは、独自のフィルターを認証フィルターの前に設定しておき、falseを返すなどして対処すれば良いと思われる。(今のところ試していないが)

もしくはgenerate で作成したコントローラで「AkActionController」を直に継承して、「application_controller.php」で設定したフィルターの影響を受けないようにするなどで対処できると思う。

また、ユーザのレベルによりアクセスの可否を決める場合も、前記「application_controller.php」で共通の認証フィルターをかけておき、独自のフィルターでユーザのレベルを判定すれば良いと思う。

テーマ:プログラミング - ジャンル:コンピュータ

ログ
ログには発行したSQL文やリクエストなどを記録しておく動作ログと、任意のログを記録する独自ログの2種類がある。

(1)準備
 config/config.phpなどに以下の設定を記述する必要がある。
   defined('AK_LOGS_DIR') ? null : define('AK_LOGS_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'log');

(2)動作ログ
 以下の設定をする事によって動作ログを取る事ができる。

 config/config.phpなどに以下の設定を記述する必要がある。
   define('AK_LOG_EVENTS', true);

 production モード時には、合わせて以下の設定も記述する必要がある。
   define('AK_ERROR_REPORTING', E_ALL );

 ログは「AK_LOGS_DIR」で指定したディレクトリ下に「development.log」などのファイル名で出力される。

(2)独自ログ
 以下のようにログ出力関数をコントローラなどからコールする事により、独自のログを出力する事もできる。
   $this->log($type, $message);

   $type としては 「PEAR_LOG_NOTICE」 などを設定する。

 なお、上記関数をコールする前に PEAR の「Log.php」が必要となるので、app/application_controller.php などで以下のようにインクルードしておく。
   require_once('Log.php');

 ログは「AK_LOGS_DIR」で指定したディレクトリ下に「main.log」というファイル名で出力される。

テーマ:プログラミング - ジャンル:コンピュータ

Akelosについて
Maple の次は Akelos というフレームワークを使わなければならなくなってしまった。

Akelos は Rails(RoR) の PHP版という位置付けのようだ。

このページと Screencasts を見れば大体の事は分かるが、Akelos としての日本語で書かれたリファレンスは、今のところほとんどない。

まぁ、Railsのリファレンスを見れば、どのような動作となるか想像はできるので、試行錯誤すれば何とかなりそうだ。

テーマ:プログラミング - ジャンル:コンピュータ

2008年3月8日の風景
2008年3月8日の風景

今日も風景は霞気味です。昨日は昼にかけて日向ではかなり暖かくなったので、今日は春の到来を実感できそうです。

テーマ:風景写真 - ジャンル:写真

2008年3月7日の風景
2008年3月7日の風景

今日は冷たい空気に覆われているようです。しかし風景は霞んでいました。

テーマ:風景写真 - ジャンル:写真

2008年3月6日の風景
2008年3月6日の風景

昨日と打って変わり春らしい気候となりました。青空と雲のバランスが良い感じの風景を撮ることがでいました。

テーマ:風景写真 - ジャンル:写真

2008年3月5日の風景
2008年3月5日の風景

今日は冬の寒さが戻ってきました。天気も薄曇で、一層寒く感じます。

テーマ:風景写真 - ジャンル:写真

2008年3月4日の風景
2008年3月4日の風景

今日も霞んだ景色が広がっています。

テーマ:風景写真 - ジャンル:写真

2008年3月3日の風景
2008年3月3日の風景

今日も霞んだ風景となりました。寒かった今年の冬も終焉を迎えているようです。

テーマ:風景写真 - ジャンル:写真

2008年3月2日の風景
2008年3月2日の風景

今日は曇っていますが、気温は高めです。

テーマ:風景写真 - ジャンル:写真

2008年3月1日の風景
2008年3月1日の風景

今日はやけに暖かい風が吹いています。風景は霞気味で、春が近づいているように思えます。

テーマ:風景写真 - ジャンル:写真