Zend Framework 1.0(日本語)以前のバージョンから Zend Framework 1.0 またはそれ以降に更新する際は、 下記の移行上の注意点に注意すべきです。 Zend_Controller1.0.0RC1 での最大の変更点は、 ErrorHandler プラグインと ViewRenderer アクションヘルパーが追加され、デフォルトで有効となったことです。 それぞれのドキュメントを熟読し、どのように動作するのかや 既存のアプリケーションに与える影響について確認しておきましょう。 ErrorHandler プラグインは postDispatch() で動作するもので、 例外をチェックして指定したエラーハンドラコントローラに転送します。 そのため、アプリケーション内にエラー処理用コントローラを含める必要があります。 このプラグインを無効にするには、フロントコントローラのパラメータ noErrorHandler を設定します。
ViewRenderer アクションヘルパーは、 アクションコントローラへのビューの注入を自動的に行います。 また、現在のアクションにもとづいたビュースクリプトを自動的にレンダリングします。 ビュースクリプトをレンダリングせず、かつ転送やリダイレクトも行わないアクションがあった場合、 これは問題になるでしょう。というのも、 ViewRenderer はそんなアクションであっても アクション名をもとに自動的にビュースクリプトをレンダリングしようとするからです。 もし既存のコードにそのようなものがあった場合の対応方法はいくつか考えられます。 一番手っ取り早いのは、フロントコントローラの起動時に ViewRenderer を無効にしてからディスパッチを行うことです。
しかし、長い目で見ればこれはあまりよい作戦ではありません。 今後も新しいコードを書き続けるならなおさらです。 ViewRenderer の機能を把握したら、コントローラのコードを見てみましょう。 まず、アクションメソッド (名前が 'Action' で終わっているメソッド) を探し、その中でどんな処理をしているかを確認しましょう。 もし次に挙げるいずれの内容も行っていない場合は、コードに手を加える必要があります。
一番簡単なのは、そのメソッド内で自動レンダリングを無効にすることです。 レンダリング、転送あるいはリダイレクトを行っているアクションメソッドがひとつもない場合は、 上で示したコードを preDispatch() メソッドあるいは init() メソッド内に書くといいでしょう。
もしメソッド内で render() をコールしていて、 規約どおりのディレクトリ構造 を使用しているのなら、自動レンダリングを使用するようにコードを書き換えましょう。
独自のディレクトリ構造を使用している場合は、 ビューの基底パスやスクリプトのパスをメソッドで設定してから ViewRenderer を使用します。これらのメソッドについての詳細は ViewRenderer のドキュメント を参照ください。 ビューオブジェクトをレジストリから取得していたり ビューオブジェクトをカスタマイズしていたり、 あるいはデフォルトとは異なるビューを使用している場合は、 そのオブジェクトを ViewRenderer に注入するために次のようにします。 これはいつでも好きなときに行えます。
|
|