パラメータ名でアクションを指定
出来るだけ元のソースを変更せずに対応したかったので
Actionの派生クラスを作成し、作成するアクションは
このクラスを派生するようにする事で対応。
- 「action_xxx_module_yyy=???」がきたら 「action=xxx」「module=yyy」
- 「action_xxx=???」がきたら「action=xxx」
とみなす。
注意点は
- 元のactionの値より優先される
- 「action_xxx=???」等とみなすパラメータが複数あった場合の動きは保障しない
define("FIX_MODULE_PREFIX", MODULE_ACCESSOR."_"); define("FIX_ACTION_PREFIX", ACTION_ACCESSOR."_"); class CustomAction extends Action { function initialize (&$controller, &$request, &$user) { // パラメータの取得 $params =& $request->getParameters(); // 全パラメータを参照していく foreach( $params as $key => $value ){ // type="image"対応 if (preg_match('/_x$/', $key) || preg_match('/_y$/', $key)) { $tmp = substr($key, 0, strlen($key)-2); }else{ $tmp = $key; } // 「action_xxx_module_yyy」の形式? if( preg_match ("/^".FIX_ACTION_PREFIX."([^_]+)_". FIX_MODULE_PREFIX."(.+)$/",$tmp , $ar_ret) ){ // 元のパラメータ削除 $request->removeParameter($key); // 今のモジュール、アクションと違う? if( $controller->getCurrentModule() != $ar_ret[2] || $controller->getCurrentAction() != $ar_ret[1] ){ // 指定したモジュール、アクションへforward $controller->forward($ar_ret[2], $ar_ret[1]); return FALSE; } } // 「action_xxx」の形式? else if( preg_match ("/^".FIX_ACTION_PREFIX."(.+)$/", $tmp, $ar_ret)){ // 元のパラメータ削除 $request->removeParameter($key); // 今のアクションと違う? if( $controller->getCurrentAction() != $ar_ret[1] ){ // 指定したアクションへforward(モジュールは今と同じ) $controller->forward($controller->getCurrentModule(), $ar_ret[1]); return FALSE; } } } return TRUE; } }