kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_「The Definitive Guide to symfonyの翻訳」からわかったこと

1.TOOL更新_「The Definitive Guide to symfonyの翻訳」からわかったこと
お助けTOOLをsymfonyに移植する方法を調査する。ToDoリストの(http://d.hatena.ne.jp/kazpgm/20090403/1238773943)暫定99.の調査
http://symfony.xrea.jp/ The Definitive Guide to symfonyの翻訳 (GFDLライセンス)
The Definitive Guide to symfony 1.2

  The Definitive Guide to symfonyの翻訳からわかったことはここに書く。

「第1章 - symfonyの紹介」から抜粋

symfonyは完全なPHP5で書かれました。
・symfonyを動かすために必要なPHPの最小バージョンは5.2です。
・symfonyの開発において複数のプロジェクトにまたがってライブラリを集中管理するために
  PEARを利用することが推奨されます。symfonyプラグインは特別な設定を格納する
  PEARパッケージです。
・symfonyフレームワーク自身がPEARパッケージとして利用できます。

・別のオープンソースプロジェクトであるPropelは現時点でPHP5のための
  ベストなオブジェクト/リレーショナル抽象化レイヤーの一つです。 
  PropelはデフォルトのORMとしてシームレスにsymfonyに統合されるので、
  この本で説明される大抵のデータの操作方法はPropelの構文に従います。

・設定を保存するためにsymfonyYAML(ヤメル)を望ましい言語として利用している。

「第2章 - symfonyのコードを探求する」から抜粋

symfonyのコアクラス
  * sfControllerはコントローラクラスです。リクエストを解読してアクションに渡します。
  * sfRequestはすべてのリクエスト要素(パラメータ、クッキー、ヘッダーなど)を保存します。
  * sfResponseはレスポンスヘッダーと内容を格納します。
    これは最終的にHTMLレスポンスに変換されユーザーに送信されるオブジェクトです。
  * (sfContext::getInstance()によって読み取りされる)コンテキスト(context)は
    すべてのコアオブジェクトと現在の設定への参照を保存します: 
    どこからでもアクセス可能です。


・symfonyのすべてのクラスはsfを接頭辞として使います。テンプレートのコア変数も同様です。

・symfonyの多くのクラスは1つのパラメータホルダー(parameter holder)を含みます。
  これはゲッター(getter)とセッター(setter)メソッドを持つプロパティを
  カプセル化するために便利な方法です。例えば、
  sfRequestクラスはgetParameterHolder()メソッドを呼び出すことで読み取りできる
  パラメータホルダーを保有します。

  リスト2-14 - sfRequestパラメータホルダーを使う
    $request->getParameterHolder()->set('foo', 'bar');
    echo $request->getParameterHolder()->get('foo');
     => 'bar'

  パラメータホルダーを使う多くのクラスはget/setオペレーションのために必要なコードを短くする
  プロキシ(proxy)メソッドを提供します。
  これはsfRequestオブジェクトにもあてはまり、リスト2-15のコードはリスト2-14と
  同じことができます。
  リスト2-15 - sfRequestパラメータホルダーのプロキシメソッドを使う
    $request->setParameter('foo', 'bar');
    echo $request->getParameter('foo');
     => 'bar'

・意外なことですが、symfonyの定数はありません。定数がPHPの大きな欠点を抱えるからです: 
  これらは一旦定義するとその値を変更できません。ですのでsymfonyは独自の
  設定オブジェクトを使います。
  このオブジェクトの名前はsfConfigで、定数を置き換えます。
  このオブジェクトはどこからでもパラメータにアクセスできる静的なメソッドを提供します。

  // PHP定数の代わり
    define('FOO', 'bar');
    echo FOO;
  // symfonyはsfConfigオブジェクトを使う
    sfConfig::set('foo', 'bar');
    echo sfConfig::get('foo');

・多くのクラスと深いディレクトリ構造を抱える大きなプロジェクトにおいて、
  インクルードするすべてのクラスファイルとそれらのパスを追跡するために多くの時間が必要です。
  symfonyはspl_autoload_register()関数を使うことで、includeステートメントを不要にし、
  次のようにクラスを直接書くことができます:
  例)
    $myObject = new MyClass();
  symfonyはプロジェクトのlib/ディレクトリの1つの中に存在するphp拡張子で終わる
  すべてのファイルの中のMyClassの定義を探します。
  クラスの定義が見つかったら、ファイルは自動的にインクルードされます。
  すべてのクラスをlib/ディレクトリに保存する場合、クラスをインクルードしなくて済みます。

「第3章 - symfonyを動かす」から抜粋

「第4章 - ページの作り方の基本」から抜粋


2009/05/29 22:00-03:00
2009/05/30 13:00-15:30

■サイト:http://kazpgm.ddo.jp/