目次

アクション定義省略時の命名規則を変更する

アクション定義省略時の命名規則を変更する

アクション定義が省略された場合*1、以下の4つのファイル名またはクラス名が暗黙のうちに決定されます。

これらの命名規則は、Ethna_Controllerに定義されている以下のメソッドをオーバーライドすることで変更することが出来ます。

アクションクラスが定義されたファイルのパス名
Ethna_Controller::getDefaultActionPath($action_name, $fallback)
アクションクラス名
Ethna_Controller::getDefaultActionClass($action_name, $fallback)
アクションフォームが定義されたファイルのパス名
Ethna_Controller::getDefaultFormPath($action_name, $fallback)
アクションフォーム名
Ethna_Controller::getDefaultFormClass($action_name, $fallback)

Ethna_Controllerでは、パス名は(アクションクラス/アクションフォーム共通で):

$default_path = preg_replace('/_(.)/e', "'/' . strtoupper('\$1')",
ucfirst($action_name)) . '.php';

つまり"foo_bar_hoge" -> "Foo/Bar/Hoge.php"となり、アクションクラス名は

$postfix = preg_replace('/_(.)/e', "strtoupper('\$1')", ucfirst($action_name));
...
$r = sprintf("%s_Action_%s", $this->getAppId(), $postfix);

となります(アクションフォームは、上記"Action"の部分が"Form"になります)。好みに応じて適宜オーバーライドしてください(それほどお勧めはしません)。

例えば、"foo_bar_hoge"というアクションに対応するファイル名を"foo_bar_hoge.php"にして、アクションクラス名を"foo_bar_hoge_action"、アクションフォーム名を"foo_bar_hoge_form"としたい場合は、以下のアプリケーションのコントローラに以下のような定義を追加します。

Sample_Controller.php:

/**
 * アクションに対応するアクションパス名が省略された場合のデフォルトパス名を返す
 *
 * @access public
 * @param string $action_name action名
 * @param bool $fallback クライアント種別によるfallback on/off
 * @return string アクションクラスが定義されるスクリプトのパス名
 */
function getDefaultActionPath($action_name, $fallback = true)
{
    return $action_name . ".php";
}

/**
 * アクションに対応するフォームパス名が省略された場合のデフォルトパス名を返す
 *
 * @access public
 * @param string $action_name action名
 * @param bool $fallback クライアント種別によるfallback on/off
 * @return string アクションフォームが定義されるスクリプトのパス名
 */
function getDefaultFormPath($action_name, $fallback = true)
{
    return $this->getDefaultActionPath($action_name, $fallback);
}

/**
 * アクションに対応するアクションクラス名が省略された場合のデフォルトクラス名を返す
 *
 * @access public
 * @param string $action_name アクション名
 * @param bool $fallback クライアント種別によるfallback on/off
 * @return string アクションクラス名
 */
function getDefaultActionClass($action_name, $fallback = true)
{
    return $action_name . "_action";
}

/**
 * アクションに対応するアクションフォーム名が省略された場合のデフォルトクラス名を返す
 *
 * @access public
 * @param string $action_name アクション名
 * @param bool $fallback クライアント種別によるfallback on/off
 * @return string アクションフォーム名
 */
function getDefaultFormClass($action_name, $fallback = true)
{
    return $action_name . "_form";
}

なお2番目の引数$fallbackは、現在アクティブなクライアントタイプ(PCブラウザ、i-mode、SOAP、etc...)に応じてデフォルト値を変更した場合等に使用しますが、とりあえず無視して頂いてOKです。


*1 アクション定義を省略するを参照