あなたはコンストラクタによって呼び出されるフォームのinit()メソッドのうち、SQLクエリを移動する必要がある(とユーザーを設定する機会を得る前に、 id)。 sqlクエリの結果が(検証時ではなく)レンダリング時に必要な場合は、フォームのrender()メソッドをオーバーライドしてからSQLクエリを実行し、parent :: render()を呼び出します。
EDIT:
OK]をクリックして、ここで私はどうなるのかです:
class My_Form extends Zend_Form
{
private $_userId = null;
/* Getter and Setter for user id here */
public function init()
{
...
$this->createElement('Select', 'nameOfTheSelectElem',
array(
/* Don't add the multiOptions here */
)
);
}
private function _addMultiOptionsForMySelectElem()
{
/* SQL Query here */
$this->nameOfTheSelectElem->setMultiOptions($resultsOfTheSQLQuery);
}
public function render($view = null)
{
$this->_addMultiOptionsForMySelectElem();
return parent::render($view);
}
public function isValid($data)
{
$this->_addMultiOptionsForMySelectElem();
return parent::isValid($data);
}
}
だからinitメソッドでは、あなたは要素を作成することができますが、この時点で要素にオプションを追加しないでください。プライベートメソッドを作成してSQLクエリを実行し、select要素にオプションを追加してから、renderメソッドとisValidメソッドからプライベートメソッドを呼び出します。 今はっきりしていることを願っています。それは...ですか?
出典
2011-01-20 18:37:00
jah
これはどちらも動作しません。エラーI取得する:http://pastebin.com/NtvPsfWD。私がそうするとうまくいく:private $ user_id = 3; (または何か)ので、それは動作しないように見える値の通過です... – networkprofile
ああ、はい、私は問題が表示され、私の新たに更新された答えを参照してください。 – jah
説明してくれてありがとう。しかしもう1つの質問:私はフォームを配置するために訴えていますか?現在はinit()関数の中にあるので、sqlのデータを使用するselect要素があるので、コンストラクタでフォームが作成されたときにsqlをrender()の内部に配置することはできません。何か案は? – networkprofile