目次

Ethna 2.1.0 から 2.3.0 への移行ガイド

Ethna 2.1.x で作った古いプロジェクトを新しいバージョン 2.3.x 系に対応させるためのガイドラインです。(これに従えばうまくいく、というわけではありません。必ずバックアップを用意した上で、確認しながら作業するようにしてください。)

※ Ethna 2.3.0 から 2.5.0 への移行については、 こちら を御覧下さい。

| 書いた人 | いちい | | | | 書いた人 | halt | 2006-11-22 20 | 勝手に編集 |

この内容はまだ途中です!!

タグの説明

[必須]最新バージョンで追加されたファイルをインストールする

古いプロジェクトを上書きするようにadd-projectしてください。これにより、新しいEthnaのプロジェクトファイルに必要だが存在しないファイルのみ新規に追加されます。

$ ls
sampleapp
$ ethna add-project sampleapp

[必須]アプリケーションの基底クラスを使うように変更する

アクションやビューに基底となるクラスを追加する事でアプリケーション全体で利用されるアクションやビューのふるまいを制御する事ができるようになります。

全てのアクション、ビューのファイルを変更しないといけないので、 "extends Ethna_" などで検索するとかして変更忘れがないように気をつけてください(変更忘れは発見しにくいバグのもとになりやすいです)。

[必須] アプリケーションマネージャのアクセス方法を変更

class factory(Ethna_ClassFactory)の汎用化により、Ethnaで登場する多くのクラスがEthna_ClassFactory経由で取得されるようになりました。これにより、クラスのソースファイが統一された基準で自動的に検索され、統一されたインタフェースでオブジェクトを取得できるようになりました(くわしくは クラスファクトリを参照)。

これに伴い、いままでアクション(Ethna_ActionClassの継承クラス)、ビュー(Ethna_ViewClass)、アプリケーションオブジェクト(Ethna_AppObject)では自動的にオブジェクトのプロパティに設定されていましたが、これが廃止されました。

コントローラの

var $manager = array(
    'un' => 'User',
);

といった記述をして、アクションなどで

$this->um->doSomething();

などとしている場合、次のように書き換えてください。

$um =& $this->backend->getManager('User');
$um->doSomething();

なお、アプリケーションマネージャはオブジェクト作成時にデータベースに(設定されていれば)接続しますが、これによって必要時に初めて接続するように変更されたことになります。

[必須] Ethna_Renderer導入への対応

これまでEthnaはSmartyに依存した作りになっていましたが、Ethna_Rendererの導入により、レンダラというレイヤを挟んで1段抽象化されました。まだSmartyに依存した部分がコントローラなどにいくつか残っていますが、今後改良される予定です。

大きな違いとして、Ethna_ViewClassがSmartyオブジェクトを直接持つのを止めて、RendererオブジェクトがSmartyを持つようにし、さらにRendererオブジェクトはEthna_ClassFactoryが管理するように変更されました。アプリのビュークラスの中で直接Smartyオブジェクトを操作していた場合、

$this->smarty->assign('foo', $bar);

次のように修正してください。

$renderer =& $this->_getRenderer();
$smarty =& $renderer->getEngine();
$smarty->assign('foo', $bar);

一度$rendererを取得するのが手間ですが、assignのような、多くのレンダラに共通であろうものについてはEthna_Rendererクラスでメソッドが用意されています。

$renderer =& $this->_getRenderer();
$renderer->setProp('foo', $bar);

ここで、setProp()は各テンプレートエンジンごとの「レンダラに値を設定」するプロキシメソッドです。詳細は Ethna_Rendererの使いかたを参照してください。

[任意] Ethna_Pluginで導入されたものを使う

新たに追加された機能で、Ethna_Pluginを利用したものについてまとめておきます。おもに、似たような枠組でさまざまな機能を用意したいもの、アプリケーション側で手軽に拡張を追加したくなるようなものがプラグイン化されています。詳しくは各説明ページと Ethna_Pluginのつかいかたを参照してください。

[使っていれば必須] Ethna_Pluginで廃止されたものを

Ethna_Plugin導入に伴い、フィルタ、ethnaコマンドのハンドラなど、多くのものがプラグイン化されました。アプリ側で対象となるクラスを直接使っていた場合に修正が必要になりますが、そのような場面は非常に少ないと思いますので[任意]としました。

[任意] Ethna_UrlHandlerを使う

Ethna-2.3.0の新機能の目玉の一つはEthna_UrlHandlerの導入です。

エントリポイントに実行したいアクションを指示するために、これまでは

http://example.jp/index.php?action_foo=true&param=bar

のように "action_アクション名" という名前のリクエスト変数を設定する必要がありました。この挙動はコントローラの _getActionName_Form() というメソッドをオーバーライドすることで変更できましたが、必ずしもわかりやすいものではありませんでした。

Ethna_UrlHandlerクラスはエントリポイント、path infoと、アクション名、リクエストパラメータとの対応を定義することで、相互の変換を可能にするものです。たとえば

http://example.jp/index.php/action/foo/param/bar

というURIと

詳細については、 PATH_INFOを使ったRequest-URIからのパラメータの取得を参照してください。