Mojavi2.0からの移行
By Tyler Tompkins
注意: This document will be changing frequently as I add more information, and rearrange to create a more logical order and progression of the said information.
- 前提条件
- 重要なものから順番に
- Context
- Translating your Renderer
- View
- Actions
- 構成
- 参照
前提条件
Mojavi3にアップグレードする前にMojavi2とPHP5をきちんと把握する必要があります。
Mojavi3の迅速な短期集中コースが欲しいなら、Creating Your First Module2を見てください。
重要なものから順番に
Mojavi2からアプリケーションを移し始める前に、あなたが使用しているどんなホストもPHP5をサポートするのを確実にしてください。
phpinfo();
を実行することで、PHP5をサポートしているかを知ることができます。
その上で、Mojavi3パッケージをダウンロードする必要があります。ここから取得する事が出来ます。
The Context
おそらくMojavi3の最も重要で新鋭な局面はContextオブジェクトです。
これが何をしたかをいったん理解すると、私はそれと恋に落ちました。
基本的に、それは次のものにアクセスすることができる一種の触媒/格納物です:
- getRequest()を通じて$requestオブジェクト
- getController()を通じて$controllerオブジェクト
- getUser()を通じて$userオブジェクト
- getModuleName()とgetActionName()を通じて現在のAction/Module名
- そして最後に、現在のmoduleのディレクトリ
多少なりとも、ユーザ/開発者(あなた)に公表されているほとんどのクラスがgetContext()関数を持っているでしょう。これにより、このオブジェクトにアクセスることができるでしょう。
連鎖呼び出しの最近の追加により、php4では出来なかった操作をすることができます。
例:
古い方法:
$obj =& $request->getAttribute('myobj');
$anotherobj =& $obj->doSomethingSpecial();
$anotherobj -> execute();
新しい方法:
$this->getContext()->getRequest()->getAttribute('myobj')->doSomethingSpecial()->execute();
幾分長すぎるので良い例とは言えませんでしたが、1行対3行という点や、参照無しで大きなオブジェクトをコピーする時に失敗する可能性が無いという点などから、私の言いたい事がわかることでしょう。
このサブ・セクションはまだまだ続きます...
Rendererの変更
Mojavi2 used 'renderers' to translate the API of one templating system
into a generic API that would easily allow a developer to switch out
one templating system for another.
例えば、Smartyテンプレートエンジンは$smarty->assign()によって値を設定できます。一方、他のテンプレートシステムであるpatTemplateでは、$pat->addVar()を使います。
In Mojavi 2, you would then write or use an existing renderer, which
you would then invoke to display your output.
注意: This was done typically through a filter, which would create the renderer object, then assign it to your $request via
$request->setAttribute('MyRenderer',$rendererObj))
Mojavi3は大まかに同じようなやり方をしますが、それぞれのviewから$requestオブジェクトを使ってrendererを取得するかわりに、単純にViewクラスを継承します。
例えば:
abstract class SmartyView extends View
{
.....
function __construct()
{
$this->engine = $this->getContext()->getRequest()->getAttribute('MySmartyObj');
}
public function setAttribute($name, $value)
{
$this->engine->assign($name, $value);
}
.....
}
注意:
$this->engine = $this->getContext()->getRequest()->getAttribute('MySmartyObj');
を使うことは、viewの中からオブジェクトを取得するために思いついたなかで一番簡単な方法だっただけで、次のようなやりかたでも同じくらいに簡単にできました:
$this->engine = new Smarty();
View
Mojavi3のViewはほんどが抽象クラスで、連動するための関数の骨組みを提供します。
その結果、Mojavi2で達成された統一されたAPIを提供します。
(View抽象クラスでインプリメントされた命名規則を強制されるので、それは統一されています)
今、(Mojavi2でやっていたような)レンダラーオブジェクトの初期化をする代わりに、単にViewを継承し、それを初期化します。
上で示したように:
abstract class SmartyView extends View
{
...
のように新しいviewはなります。
この新しいViewタイプをactionに組み込むために、モジュールでviewを定義する時にそれを継承します。
例えば:
class DoSomeActionSuccessView extends SmartyView
{
...
}
ご覧のように、このやり方はViewをnewする毎に$requestからrendererを取り出すよりも流動的です。コピー&ペーストしなければならないコードが大幅に少なくなり、したがって保守するコードも少なくなります。
また、Viewの命名体系が異なっていることに気づいたかもしれません。DoSomeActionView_success.class.phpを使う代わりに、今ではDoSomeActionSuccessView.class.phpを使うことになるでしょう。
クラス名も同様です。(Mojavi2では、単にviewクラスをDoSomeActionViewと命名しました。
in Mojavi3 it's DoSomeActionSuccessView replacing 'Success' with your application's state).
このサブ・セクションはまだ続きます...
Actions
Mojavi3のActionsは、少しの改善と意味論的な微調整をあちこちにしただけで、Mojavi2のものとかなりよく似ています。
下に示します:
- Mojavi2でVIEW_SUCCESSを返すような場合には、今ではアプリケーションの状態に対応したviewクラスの定数を返します。すなわち: View::Success または、View::Error
- 実行をサポートするviewのタイプをチェック(getRequestMethods)する時には、REQ_POST等の代わりに、Request::Post等を返します。
- getRequestMethod()には、Request::Allという全てのrequestメソッドを提供する新しいタイプがあります。
- 今では全てのactionが継承する基底Actoinクラスには、getContext()メソッドがあります。これによってcontextオブジェクトにアクセスできます。
構成
デフォルトでは、Mojavi3の構成は.iniファイルを使って行います。
この単純で真っ直ぐな構成は、mojaviの構成をとても簡単にします。
これらのiniファイルの基本的な構文は次の通りです:
[SECTION] ; コメント... ConfigKey = "%MO_APP_DIR%/my/config/value"
iniファイルを嫌いな人がいるかもしれないので、Mojavi3では自分で構成ハンドラーを書けるように作られました。
例えば、xmlファイルをmojaviを構成するのに使いたい場合は、構成ハンドラーを書いて、それをプラグし、カスタムの構成スタイルを使用し始める事ができるでしょう。
このサブ・セクションはまだ続きます...
参照
To find out more about PHP5 in general go here:
Where can I go to learn more?
