Ethna_ActionForm::getHiddenVars

確認の画面とか、元に戻って再編集といった様な具合の処理をさせる際にhiddenとして変数を控える際に使える。
画面で入力を一通りユーザに行ってもらって次の画面に行って確認させた際に元に戻って再編集。とされた様な場合とか。
Ethna_ActionClassを継承しているアクションクラスで以下の処理を書く。


<?php
class Sample_Action_Index extends Ethna_ActionClass
{
// 中略

function perform() {
$hidden_vars = $this->af->getHiddenVars(null, array('form_foo1', 'form_foo2'));
$this->af->setAppNE('hidden_vars', $hidden_vars);

return null;
}
}
?>


なお、getHiddenVarsの定義は、

string getHiddenVars ([array $include_list = null], [array $exclude_list = null])

  • array $include_list: 配列が指定された場合、その配列に含まれるフォーム項目のみが対象となる
  • array $exclude_list: 配列が指定された場合、その配列に含まれないフォーム項目のみが対象となる

(Ethna APIリファレンスより)

となっている。ActionFormで宣言してある中からhiddenで抽出する対象を選ぶか、例外を選ぶかのいずれかを行うことになる。
ラジオボタンチェックボックスも対象になるので、そういったものを例外にするときや、パスワードの様に再入力が必要なものは除外する等、楽な方を選べばよいと思われる。
ActionClassでgetHiddenVarsを呼び出した後、以下の記述があるのでビュー側にhiddenで展開された文字列がアサインされる。

$this->af->setAppNE('hidden_vars', $hidden_vars);

ActionForm::SetAppNEを使うのは、入力文字列のエスケープ無しにそのまま戻すためですね。*1
Smartyのテンプレート側で次の様に書くとhidden表記が展開される。


<html>
<head>
(略)
</head>
<body>
<form>
{$app_ne.hidden_vars}
</form>
</body>
</html>

実際に通して実行されると、{$app_ne.hidden_vars}の部分に、

<html>
<head>
(略)
</head>
<body>
<form>
<input type="hidden" name="foo1" value="hoge1">
<input type="hidden" name="foo2" value="hoge2">
(以降、ActionFormで定義した数分挿入される)
</form>
</body>
</html>


といった具合にActionFormで定義され、且つEthna_ActionForm::getHiddenVarsの呼び出しの際に対象として選ばれたもの、あるいは例外として選ばれたフォーム以外の値が全て記述されることになる。
ちなみにAPIリファレンスは、これ

*1:きっと。多分。