Agavi-0.11でシステムアクションをcontextごとに分ける
Agavi-0.11でデフォルトアクション、ログインアクション、セキュアアクション、Error404アクションなどのシステムアクション(system-actions)の定義はsetting.xmlで行うが、ここではcontextによる分岐は例外テンプレートを除いては利用できない。
そこで、どうしてもやりたい場合は次のようにすると良いとDavidが言っていたので紹介します。
前提
- モジュールはSystem,Frontend,Backendがある。
- Frontendモジュールはユーザ側
- Backendモジュールは管理側
- 今回分岐したいのはLoginアクション
System.Loginの作成
振り分けを行うには次のようなActionとViewを用意する
Action: <?php class System_LoginAction extends AgaviAction { public function getDefaultViewName() { return 'Proxy'; } } ?> View: <?php class System_LoginProxyView extends AgaviView { public function execute (AgaviRequestDataHolder $rd) { $config = include(AgaviConfigCache::checkConfig(AgaviConfig::get('core.config_dir') . "/system_actions.xml", $this->context)); return $this->createForwardContainer($config['login']['module'], $config['login']['action']); } } ?>
設定ファイル
まずはsetting.xmlでSystem.Loginをログインアクションに指定してから、system_actions.xmlを次のようにする
<?xml version="1.0" encoding="utf-8" ?> <configurations xmlns="http://agavi.org/agavi/1.0/config"> <configuration context="frontend"> <login> <module>Frontend</module> <action>Login</action> </login> </configuration> <configuration context="backend"> <login> <module>Backend</module> <action>Login</action> </login> </configuration> </configurations>
あとはFrontend.Login,Backend.Loginをそれぞれ実装すればOKです。