Mojavi 2.0 Tutorials, Updates and Docs

Downloads

I have recently been working on a bug-fixed release of Mojavi 2.0. I’ve comp leted the changes, and would love to have some people test against it before I c onsider it an official release. The highlights of this release include PHP 4.4. 0 support, and several bug fixes and enhancements.

MojaviProjectのやる気の無さに2.0.3βを勝手に出しちゃってる人が。
PHP 4.4.0対応とか良さそうだけどこれありなの?
Tanner BursonはPHP5で動くMojavi2プロジェクトYumaの人でもあります。(どんだけMojavi2好きなんだって話だよ)

Yuma Project Page

What is it?

The Yuma project is a custom build of the Mojavi project. More specifically it is aimed to be a PHP5 compatible build of Mojavi 2.0. Mojavi 2.0 is an excellent framework for building PHP applications. It is efficient in both execution speed, and development time.

質問されたので答えたついでにのせるシリーズ。

Q: 「ログアウト後の戻るボタン対策はどうすればいいのか?」

A: 「PHPデフォルト設定(php.ini-dist)なら正しくログアウト(session_destroy)してればそれで良い。」

「ログアウト後の戻るボタン問題」とは何か。

ログアウトしてもブラウザの戻るボタンで戻るとキャッシュ上のページが表示されてそこから「購入」とか都合の悪い処理をされちゃう問題。

要はブラウザがキャッシュしないで、戻るボタンを押されても必ずサーバに問い合わせてくれれば大丈夫。
ブラウザに「キャッシュ使うな」と言うにはHTTPヘッダに下記を書けば良い。

Expires: 0
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache

Expiresは過去の日付とかなら良い。no-storeとno-cacheは、「ファイルとかにキャッシュするな」と「メモリ上とかにもキャッシュするな」、must-revalidateは「必ずサーバ見に行け」、PragmaはHTTP 1.0用らしいです。
ヘッダを自分で書いてもいいですが、PHPではphp.iniでsession.cache_limiternocache(デフォルト)に設定されていると上記のヘッダを自動的に出してくれます。
必ずサーバに問い合わせてくれれば、ログアウトされてるので「ログインしてください」画面に飛ばすことができます。

via: Hypertext Transfer Protocol HTTP/1.1 – 13 Caching in HTTP

プログラマー日記(2005-08-09)

なおRailsは、Rubyという言語の特徴を最大限に生かし、またJavaのフレームワークを参考にせず設計されています。PHPのフレームワークも、Javaのさるまねに陥ることなく、PHPの良さとは何かを考えながら、製作していただけたらと思います。

PHPの良さとは何か!

おれの考えたPHPの良さ:

  1. 関数いっぱい
  2. HTMLに埋め込める
  3. オブジェクト指向とか知らなくても作れる

それをフレームワークに生かせないかということで、一発ネタのはずだったAwesomeFrameworkをちょっと変えてみました。

AwesomeFramework-0.5.0.tar.gz

1.関数いっぱい

AwesomeFramework(以下AF)は関数のみ!(クラスとか無い)

  • forward($action) : アクションを実行する。(処理が移る)
  • redirect($action) : アクションにリダイレクトする。(別リクエストになる)
  • fetch($action) : アクションの実行結果の出力を取る。

2.HTMLに埋め込める

AF標準のRendererはPHP!
いままでは「HTMLに埋め込める機能いらねぇ」とか思ってましたが、たとえば単に

Hello World!

と書いたテキストに拡張子「.php」をつけてincludeすると全内容が勝手に出力される!
PHPタグの外側は勝手に出力される=PHPタグが無いテキストは全部が普通に出力される。

3.オブジェクト指向とか知らなくても作れる

AFのactionはただのPHPファイル。関数ですらなく、上から順番に実行されます!

Hello Worldアプリのaction:

<?php
$_REQUEST["message"] = "Hello World";
forward("view");
?>

PHPファイルにするとグローバル変数地獄になって大変だろうと思っていたんですが、全てのactionはforward関数内でincludeされるのでフィルタチェイン的構造になったforward関数のスコープになって何気にnamespaceが分かれてる!

ファイルをactionの単位として$selfというそのaction自身の情報を含んだ変数をインポートすることにしました。($thisだと混乱するのでPerl的な$self)

$selfの中身:

Array
(
    [action] => index
    [file] => index.php
    [abs_path] => D:/Program Files/eclipse-3.0.2/workspace/AwesomeFramework/actions/index.php
    [abs_uri] => http://localhost/index.php?action=index
    [resource] => Array
        (
        )
)

オブジェクト指向JavaScript

クロージャとはブロック化されたコードの事です。その特徴はクロージャが生成されたスコープのローカル変数を取り込むことができる、というものです。

JavaScriptでのクロージャの話。PHPだと馴染み浅ですが、楽しいし便利!

PECL :: Package :: sdo

Service Data Objects (SDOs) enable PHP applications to work with data from different sources (like a database query, an XML file, or a spreadsheet) using a single interface.

IBM提供のextention、sdoがバージョンアップ。

descriptionが変わってる!
すごいなんか分かりやすくなってる!

ヘテロジーニアスなデータじゃわかりずらいものな。

ref: PECL sdo

Java魂―プログラミングを極める匠の技

毎週日曜日、ラーメン食いながらちょっとづつ読んでたJava魂やっと読了。

不変オブジェクトやコレクションの話など、地味だけど現場では大変重要なお話がためになります。ロジックエラーをコンパイラが検出できるエラーに変えてこうというテクニックが多いんですが、PHPでは関係無いわな。
最後の方の参照とかは難しくて読むのが辛かった!

PEAR :: Manual :: 提供するに値 しない 場合

PEAR の ””A”” は、”“Application”” を表しているのですが、 アプリケーションがサポートされていないことについては単純な理由があります。 現在のところ、完全な WEB アプリケーションのパッケージを扱えるような インフラ(PEAR インストーラなど)が開発されるに至っていないからです。

状況が変わりましたら、サイトを更新してお知らせする予定です。

PEAR 1.4とかPHP_Archiveとかがそのインフラにあたるのかな!?

PHPカンファレンス2005のEthnaの藤本さんの発表であった、

「ウィザードなど一定のパターンのあるパーツをプラグインとしてフレームワークに組み込む」

っていう話を聞いて、なるほどそういうのがたくさんあったら便利かもと思いました。フレームワークでクラスライブラリより粒度の大きい再利用部品ができたので更に粒度を大きくしようとするとコンテンツを再利用できるようにしようとして自然とレイヤーが上がるのかもしれません。

最近PHPのフレームワークを調べていると、以前見つけたMidgardとか最近知ったBlueshoesとかCMSフレームワークというのを見かけるようになりました。
フレームワークより部品の粒度を上げてくと自然とCMSに向かっちゃうのかもと思いました。

ref: TownPortal
ref: PHPカンファレンス2005

PHPカンファレンス2005行って来ました。

寝坊したけど間に合って良かったです。
テンション無理やり上げて、発表も何とか終わりました。

資料: framework description.pdf

フレームワークのお話はそれぞれ新しいトピックが聞けて、ホントに1ヶ月とか1週間とかいう単位で状況がどんどん動いていっているなと思いました。

トピック:

  • ICCの確認のせいで複雑に
  • Agavi
  • パターンをフレームワークのプラグインに
  • フレームワークでCSRF対策
  • Seasar.PHP

2~3時間ぐらいしかいられなかったんですが、Php Application Design Handbookを注文しちゃったZefardさんにお会いできたり、会社の別支社の方と話せたりして楽しかったです。

その後、西武新宿の激旨ホルモン屋「幸永」でプチ打ち上げ。

ref: PHPカンファレンス2005