はじめに
agaviタスクではAgaviとS2Container.PHP5の連携に必要なファイルの追加や書き換え作業を全て自動で行います。通常のプロジェクトとの相違点は下記になります。
index.php
変更点:書き換え
__autoloadメソッドにてS2Containerのクラスファイルを呼び出せるように変更された「 s2agavi.php 」をrequire_onceするように書き換えを行います。
変更前// +---------------------------------------------------------------------------+ // | An absolute filesystem path to the agavi/agavi.php script. | // +---------------------------------------------------------------------------+ require_once('/path/to/php/lib/php/agavi/agavi.php');変更後
// +---------------------------------------------------------------------------+ // | An absolute filesystem path to the agavi/agavi.php script. | // +---------------------------------------------------------------------------+ require_once('/your/project/webapp/lib/s2agavi/s2agavi.php');
config.php
変更点:追記
S2Container.phpの呼び出しやinclude_pathの変更、定数宣言などを追記します。
変更後// +---------------------------------------------------------------------------+ // | You may also modify the following other constants in this file: | // | - AG_CONFIG_DIR (defaults to <AG_WEBAPP_DIR . '/config'>) | // | - AG_LIB_DIR (defaults to <AG_WEBAPP_DIR . '/lib'>) | // | - AG_MODULE_DIR (defaults to <AG_WEBAPP_DIR . '/modules'>) | // | - AG_TEMPLATE_DIR (defaults to <AG_WEBAPP_DIR . '/templates'>) | // +---------------------------------------------------------------------------+ define('S2BASE_PHP5_ROOT','/work/web/s2base.php5'); ~省略~ /** * library setting */ require_once('S2Container/S2Container.php'); require_once('S2Dao/S2Dao.php'); /** */ define('S2DAO_PHP5_USE_COMMENT',false); //define('S2CONTAINER_PHP5_LOG_LEVEL', S2Container_SimpleLogger::DEBUG); ?>
webapp/config
変更点:書き換え
webapp/configではS2Containerを利用するためにいくつかの設定ファイルの書き換えを行います。
autoload.ini
変更点:追記・仕様変更
autoload.iniにはAgaviで使用するクラスファイルを列記しキャッシュ化しますが、DIベースのアプリケーションはファイル数が増えるため記述作業に掛かるコストが高くなります。その対策としてディレクトリと拡張子を指定して再帰的にファイル名を取得し、キャッシュ化する機構を用意しています。
記述方法[autoload] ; +------------------------------------------------------------------------+ ; | Agavi Interfaces | ; +------------------------------------------------------------------------+ ~省略~ ; +------------------------------------------------------------------------+ ; | Custom Classes | ; | ---------------------------------------------------------------------- | ; | Any classes you see fit that might be of use, such as classes that | ; | used in a session that must exist when the session unserializes its | ; | data. Another good example is a custom factory implementation such as | ; | a controller or user. | ; +------------------------------------------------------------------------+ ; example ; MyCustomClass = "%AG_WEBAPP_DIR%/lib/MyCustomClass.class.php" 単体で読み込むクラスファイルはここに記述するようにして下さい。 ; +------------------------------------------------------------------------+ ; | Traversing File System | ; +------------------------------------------------------------------------+ ディレクトリを指定してファイルを読み込む場合はここに記述して下さい。 dirPathでディレクトリを指定し、fileExtで読み込む拡張子を指定します。 ファイル名は必ず 「 クラス名(.class).php 」 になるようにして下さい。 projectコマンド及びmoduleコマンドを使用した場合、 modules/MODULE_NAME以下 service/、interceptor/、dao/、entity/が自動で追記されます。 [DefaultService] dirPath = "%AG_WEBAPP_DIR%/modules/Default/service" fileExt = ".class.php" [DefaultInterceptor] dirPath = "%AG_WEBAPP_DIR%/modules/Default/interceptor" fileExt = ".class.php" [DefaultDao] dirPath = "%AG_WEBAPP_DIR%/modules/Default/dao" fileExt = ".class.php" [DefaultEntity] dirPath = "%AG_WEBAPP_DIR%/modules/Default/entity" fileExt = ".class.php"
config_handlers.ini
変更点:書き換え
autoloadをTraversalAutoloadConfigHandlerを使用するように書き換えます。
変更前[config/autoload.ini] class = "AutoloadConfigHandler"変更後
[config/autoload.ini] class = "TraversalAutoloadConfigHandler"
contexts.ini
変更点:追記・書き換え
アプリケーションで使用するコントローラをS2Base_AgaviControllerに変更し、デフォルトにセットするように書き換えます。
変更前[contexts] default = "web" ; Web context [web] action_stack = "ActionStack" controller = "FrontWebController" execution_filter = "ExecutionFilter" database_manager = "DatabaseManager" request = "WebRequest" security_filter = "BasicSecurityFilter" storage = "SessionStorage" user = "BasicSecurityUser"変更後
[contexts] default = "s2agavi" ; Web context [web] action_stack = "ActionStack" controller = "FrontWebController" execution_filter = "ExecutionFilter" database_manager = "DatabaseManager" request = "WebRequest" security_filter = "BasicSecurityFilter" storage = "SessionStorage" user = "BasicSecurityUser" ; S2Agavi context [s2agavi] action_stack = "ActionStack" controller = "S2Base_AgaviController" execution_filter = "ExecutionFilter" database_manager = "DatabaseManager" request = "WebRequest" security_filter = "BasicSecurityFilter" storage = "SessionStorage" user = "BasicSecurityUser"
webapp/lib/s2agavi
変更点:追加
AgaviとS2Containerを連携させるために必要なファイルを追加します。追加されるファイルは「 s2agavi.php 」「 S2Base_AgaviController.class.php 」「 TraversalAutoloadConfigHandler.class.php 」の3点です。