ヱビスブログ ::Symfony feat. S2Container.PHP5
kloveさんがやっておられましたMaple&S2ContainerとEthna&S2Containerに影響されて、Symfonyでやってみた次第です。 ちなみにSymfonyには全然興味がありませんでした。 Agavi/Propel/S2Containerで構築していたので。 触ってみる機会がてら組み合わせたので、識者の方がおられましたらもっと良い方法にブラッシュアップしてみて下さい。
[UPDATE March 02, 2006]
保留にしていたテスト部分を更新しました。 それに伴いセットアップに若干変更があります。 ------------ CHG - s2container.inc.php等の呼び出し場所を変更しました CHG - myFrontWebController.class.phpにgetDiconPathメソッドを追加しました ■はじめにgetActionをフックにします。とりあえず動かすことが目的ですので、コアな部分に手を加えたりもしてます。 private権限なメソッドを巧くかわしながら実装すればなんとかなるかもしれません。 ■環境Debian/Sarge(coLinux)Apache-2.2.0 PHP-5.1.1 MySQL-4.1.11 Symfony-0.6.0(sf_sandbox) S2Container.PHP5-1.1.0-beta2 S2Dao.PHP5-1.0.0-beta3 [sf_sandbox]symfonyはpearでのインストールも可能ですが、今回はsf_sandboxというお手軽キットを使います。[php.ini]magic_quote_gpcがOnだとSymfonyに怒られるので、Offにします。[S2Container.PHP5/S2Dao.PHP5]双方ともsf_sandbox/libに配置し、s2dao.inc.phpの一部をコメントアウトと修正を行います。
/* ---------【コメントアウト】
require_once(S2DAO_PHP5 . "/S2DaoClassLoader.class.php");
if( class_exists("S2ContainerClassLoader") ){
S2ContainerClassLoader::import(S2DaoClassLoader::export());
}
*/ ---------【/コメントアウト】
if( class_exists("S2ContainerMessageUtil") ){ ---------【アンダーバーが不要なので削除】
S2ContainerMessageUtil::addMessageResource(S2DAO_PHP5."/DaoMessages.properties");
}
[アプリケーションとモジュールを作成]sf_sandbox/apps以下にアプリケーション[s2symfony]とモジュール[demo]が作成されます。sf_sandbox/webにはs2symfony.phpとs2symfony_dev.phpが出来ているはずです。 [s2symfony_dev.php]sf_sandbox/web/s2symfony_dev.phpを修正します。trueのままだとStrictStandardが出るので、とりあえずfalseに。 困った時は自分の都合で。 [sfController.class.php]sf_sandbox/lib/symfony/controller/sfController.class.phpを修正します。あまりコアな部分に手を加えたく無いのですが、如何せん権限がガチガチでどうにもならないので下記メソッドを追記して少しだけ緩やかにしてあげます。 [autoload.yml/properties.yml]sf_sandbox/apps/s2symfony/config/autoload.ymlを作成します。ここに記述されているディレクトリ内(サブディレクトリも含む)指定拡張子ファイルを全てautoload用キャッシュファイルに書き出してくれます。 sf_sandbox/libあたりはデフォルトでやってくれます。s2dao.inc.phpのClassLoaderを外した理由はコレ。 同一ディレクトリにあるfactories.ymlの修正もします。 myFrontWebControllerを使うように指定します。 [myFrontWebController.class.php]sf_sandbox/apps/s2symfony/lib/myFrontWebController.class.phpを実装します。getActionをフックにコンテナを呼び出します。 呼び出し部はkloveさんのSpecialSourceを丸コピーです。 [データベースの準備]S2Daoのサンプルにあるやつを使います。事前にレコードが複数入っているとベターです。[actions.class.php]sf_sandbox/apps/s2symfony/modules/demo/actions/action.class.phpにセッターを追記します。これもkloveさんのと同じ体です。 [Demo.dicon]sf_sandbox/apps/s2symfony/modules/demo/lib/dicon/Demo.diconを配置。[Cd1Dao.class.php]sf_sandbox/apps/s2symfony/modules/demo/lib/dao/Cd1Dao.class.phpを配置。[CdBean.class.php]sf_sandbox/apps/s2symfony/modules/demo/lib/entity/CdBean.class.phpを配置。モノはS2Daoのサンプルファイルをそのまま使います。 [pdo.dicon/dao.dicon]双方ともsf_sandbox/lib/diconに配置していますが、dao.diconはモジュール内diconディレクトリの方が多分良いと思います。 [テスト]アプリケーション/モジュールを生成した際にsf_sandbox/testディレクトリにs2symfony/demoActionsTest.phpも作られますので、これを使ってテストを行います。SymfonyはどうやらsimpletestのWebTesterがデフォルト 。 nanoservを使ってWebServerをエミュレートしています。 もちろん通常のテストも可能ですが、エミュレートしている分レスポンスが悪い。 今回は横着してエミュレートをそのままにロジックのテストを行います。 対象はCd1Dao。 sf_sandbox/test/s2symfony/demoActionsTest.phpの編集。 デフォルトのtest_simpleメソッドはコメントアウトしてもらっても結構です。 まずはsetUpでcontainerを呼び出します。 テストメソッドを書いていきます。 テストを実行。 ■まとめと考察あまりSymfonyの事を良く分かっていないまま見切り発車でやってしまっているので、これよりもベターな方法があると思います。 触ってみた感想としては、AgaviにRoRのスタイルを加えた感じでしょうか。 あとキャッシュがハンパ無いです。Agaviのコミッタも影響されていました。 ちなみにSymfony自体にDIモドキが実装されているようです。 とはいえ、そこにフレームワークがある限りS2Containerを組み合わせていく、というアティテュードが大事なんじゃ無いかと思いました。多分。 |
クイックサーチABOUTARTICLES最近のエントリ
TUMBLRカテゴリ管理 |