Zend Framework

Zend_Formを使うなら

Zend_Formについて、ZFのメイン開発メンバーの一人、[Matthew Weier O'Phinney]が連載を開始しているので、要チェックかもしれません。 第1回はシンプルなデコレーター、第2回はデコレーターをレイヤー化して適用する方法が書かれていますね。 http://weie…

複数サーバー間セッションにZend_Cacheを利用する

Zend_Cacheのバックエンドmemcachedはとても便利ですね。請負で常駐で入って昨年3月にリリースされたサービスでも使いました。設計からリリースまでほとんどの作業をこなしたのですが、そこでは、会社の方針でPHPセッションは使用禁止*1、スケール目的にフ…

リクエストに対するフィルター・バリデーションについて

リクエストに対するフィルタやバリデーションを実施するのに、たとえばZend_Formを使っている分にはZend_Formに設定するフィルタやバリデーションを使えるからよいのですが、それ以外のデータについてはどうでしょうか。 Zend Frameworkでは、リクエストのバ…

Zend_Cache_Backend_Fileの限界点

ZendFrameworkのファイルをバックエンドとしたキャッシュは他のコンポーネントや拡張を必要としないのでお手軽に実施できます。 ただ、キャッシュエントリーが多くなるとキャッシュのクリアーなどで若干問題が発生するかもしれません。 複合的な要因で発生す…

既存システムにページキャッシュを入れてみる

既存CMSで構築されたシステムを移植する作業中なのですが、急ぎ負荷問題だけ解消しておきたいサイトがあったので先行してキャッシュだけ導入しておきました。 Zend_Cacheのページキャッシュが適用できるようなサイトならこの作業は数分で済みます。オプショ…

Zend_Configはイテレーターを壊しても大丈夫になる。。

イテレーターって、要素をunsetしたら無効になるもんだと思ってましたが、unsetしても動作するのが普通なんでしょうか。Zend_Configがunsetしてもnextが有効になるような実装に変わるようです。

Viewの挙動に、もやっと

Zend_View周辺(ViewRenderer、Zend_Layout、Zend_Controller_Action)の仕様にもやっとしてます。 ViewRenderer http://d.hatena.ne.jp/noopable/20090211/1234300771 ここでも書きましたが、ViewRendererを有効にすると、基本的にViewRendererのビューオブジ…

Zend_Configでグローバルセッティング

フロントコントローラーに安全かつ柔軟な設定レジストリを作ってみました。 上書き禁止なfrontControllerのZend_Config フロントコントローラーを拡張して、ReadOnlyなZend_Configオブジェクトを持たせます。 たとえば、フロントコントローラーで _config; }…

ヘルパーブローカーとヘルパーの初期化タイミングとビューbasePathの変更について

アクションコントローラーの再利用性を考慮するとViewRendererはなるべく使いたい。でも便利なものほど内部はブラックボックスになっていて微妙にわかりにくいことがあるのでメモ。 検討課題 アクションコントローラーを_forwardまたはActionStack等で使いま…

Zend Framework PHPUnit

いままで、テストにはSimpleTestを使っていました。 CakePHPやethnaだとSimpleTestを使っていると思います。 ethna http://ethna.jp/ethna-document-dev_guide-misc-unittest.html CakePHP http://bakery.cakephp.org/articles/view/testing-models-with-cak…

Zend Serverを試す

Zend Serverがβリリースされているので、ローカルで試してみることにした。xamppと比べてみるのもいいかなと。 ダウンロードとライセンスの取得 http://www.zend.com/products/server/downloads ここからトライアル版とトライアルライセンスを取得する。※ラ…

逆引きルート名は使いやすいのだろうか。

ZendのMVCで単純にデフォルトのモジュールルートを使っている分には特に困ることはないのだが、CMSライクにURLをフルカスタマイズして利用する場合、逆引きの使い方にやや不安が・・・ リンク先はどのルートに格納されている? たとえば、あるページから別の…

ZFアプリケーション内で変数スコープの管理とZend_Registry

前記事で、Zend_Registryの多用には要注意とだけ書いて、自分なりの使い方を書いてなかったのでメモ http://d.hatena.ne.jp/noopable/20090228/1235784269 とりあえず、基本パターンのおさらい 実行時設定はフロントコントローラーに登録する http://d.haten…

Zend_Registryの多用には要注意

MLでの話を斜め読みしていると、パラメーターの引き渡しにZend_Registryを使うっていうアドバイスが乱発されているような気がする。 確かに、global変数にほいほい入れてしまうよりはマシなんだけど。そうは言っても、≒グローバルなZend_Registryを多用する…

Zend_Dom_Query

DOMDocumentを使うのにCSSセレクタが使えるというので、Server Side Dom Scriptingに使ってみた。 処理の流れとしては、 XMLもしくはHTMLの文字列 をZend_Dom_Queryにセットする。 CSSセレクタで検索して結果を取得する。 結果はZend_Dom_Query_Resultオブジ…

モデルのAutoLoad

http://d.hatena.ne.jp/noopable/20090224/1235429939 昨日、プラグインローダーでモデルをロードするっていう話を書いたばかりだけれど、MLで、ZF1.8に入るのか入らないのか、Zend_Application_Module_Autoloaderの話題が出ていた。 これを使うと getModel(…

Zend_Loader_PluginLoaderでモデルクラスをロードする

モデルをロードする一番てっとり速い方法は、直接require_onceする方法かもしれない。 しかし、コントローラーを跨いだ処理だったり、コントローラーやビューを抽象化しながらモデルを扱いたい場合、個別に検索パスをハードコーディングする方法はできれば避…

Dispatcher_Standardでちょっとメモ

ちょっとわかりにくいところがあったのでメモ Controller_FrontのdispatchからController_Dispatcher_Standardのdispatchが呼ばれる。クラスのロードはloadClassなのだが、その際、_curModuleがセット済みであることが必要になる。_curModuleと_curDirectory…

Zend_Queueを読んだ

http://d.hatena.ne.jp/noopable/20090212/1234388931 ここで書いた、コントローラー間のメッセージキューだが、Zend_Queueがincubatorに入っているので、少し意識して改造した方がいいかもしれないと思った。 Zend_Queueを読んだ Zend_QueueはアマゾンのSQS…

ZendFrameworkの気に入っているところ(1)

実はこれ http://framework.zend.com/community/contribute 企業でも近頃いろんなオープンソースを扱うようになってきたけれど、納品物にOSSを含む時、ライセンスの問題を本当にクリーンにしたかったらこういう手だろうなぁっていう。たとえば、このブログで…

部分一致ルートに関する考察

現在のルーターの仕様は、ルートをハッシュ配列に入れて、順に一致をチェックしながら決定する仕組み。あらゆるルートは検索を開始する前に登録するのが基本。URLのassemble時に名前指定でルートを特定してURLに変換するため、名前付きで登録されていないル…

ActionStackとViewRendererとZend_Layoutの連携

ActionStackとViewRendererとZend_Layoutを組み合わせると、ページ構成を決定するコントローラーから任意のコントローラー経由で収集したコンテンツをレイアウトの各セグメントで利用できるようになる。 たとえば、メニューに投入するコンテンツは$this->lay…

Zend_Controller2.0 PageControllerPattern

http://framework.zend.com/wiki/display/ZFDEV/Zend_Controller+2.0#Zend_Controller2.0-IntegratethePageControllerpattern Zend_Controllerのロードマップにページコントローラーパターンがある。 # wikiが古いだけで、ページコントローラーパターンって…

コントローラー間のメッセージキューを作った

あるアクションコントローラーから、複数の別のコントローラーに情報を伝達しながら処理を渡したいというニーズがあったので、既存の転送とは別にメッセージキューを利用して計画的な処理チェーンを作成できるようにしてみました。 このアイデアは、Presenta…

ミニメモ

View関連 ViewRendererを使っていると、特別な処理をしないかぎり、どのアクションコントローラーでも同じviewインスタンスを使用する。ViewRendererのinitViewの最後の処理でセットされている。 Viewに対して参照でモデルを投入する際は、コントローラー間…

Zend_View用のフィルターで、コンテンツをZend_Dojoタブコンテナーに入れる

http://d.hatena.ne.jp/noopable/20090207/1233957428 これの続きで 要件 コントローラーの出力内容についてはViewRendererで作成 Zend_DojoのcontentPaneでラップ、その後タブコンテナでラップ レイアウトにはdojoソースを出せるものを使用 以上の要件を ht…

Zend_Dojo contentPaneでコンテンツをラップする

dojoのレイアウト機能を利用する場合、レイアウトの最小単位をcontentPaneとし、tabContainerやaccordionContainerなどのレイアウト用コンテナーに格納する。 フレームワーク的にはZend_DojoのcontentPaneでコンテンツを包むことになる。 ただし、Ajaxで動的…

Zend_View_Filterでデコレーター実装する。

Zend_View_Filterというのは、Zend_View_Abstract内の記述。実際には、プラグインパスを与えてる際のクラスプレフィックスとしてZend_View_Filter_がデフォルトになっているだけで、Zend_Viewのディレクトリにはフィルターは登録されていない。(いずれ、登…

基本的なコントローラーでの指定

個人的にはdojoの指定はコントローラーの基底にこんな感じで作ってある view); $this->view->dojo()->setLocalPath('/externals/dojo/dojo/dojo.js') ->registerModulePath('flower', '../../flower') ->requireModule('flower.Tools') //->requireModule('d…

Zend_Layoutで多層レイアウト -Zend_Dojo レイアウト機能を生かす-

Zend_Dojoを使ったレイアウトをこなすには、ViewRendererがビュースクリプトをレンダリングした後、かつレイアウトスクリプトでヘッダを吐く前に、Dojoベースのレイアウトはすべて準備しておく必要があり、それを解決する方法は・・・ってことで。この解決を…