2011-01-20 11 views
1

私はこの選択フォームにselectboxを使用しています。selectboxの値はuser_idによって異なります。したがって、これらの値はDBから選択され、私のフォームにuser_idが必要です。コントローラを介してZend_Formに値を渡す?

私は、フォームを作成するとき、私はこれを行うことができるように、私のフォームに public user_id;データメンバーを与えてみました何

$form = new My_Form(); 
$form->user_id = $theUserId; 

たぶん私は欠けている何かを、私はちょうどこれを取得することはできません作業。 $ theUserIdは私のコントローラに値を持っていますが、私のフォームには値がありません(私のフォームに$this->user_idを入力すると、Invalid parameter number: no parameters were bound

どうすればいいですか?

答えて

1

あなたはコンストラクタによって呼び出されるフォームの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メソッドからプライベートメソッドを呼び出します。 今はっきりしていることを願っています。それは...ですか?

+0

これはどちらも動作しません。エラーI取得する:http://pastebin.com/NtvPsfWD。私がそうするとうまくいく:private $ user_id = 3; (または何か)ので、それは動作しないように見える値の通過です... – networkprofile

+0

ああ、はい、私は問題が表示され、私の新たに更新された答えを参照してください。 – jah

+0

説明してくれてありがとう。しかしもう1つの質問:私はフォームを配置するために訴えていますか?現在はinit()関数の中にあるので、sqlのデータを使用するselect要素があるので、コンストラクタでフォームが作成されたときにsqlをrender()の内部に配置することはできません。何か案は? – networkprofile

0

フォームをビューに割り当てていますか?その場合は、$this->form->user_idにする必要があります。

+0

アクションメソッドの最後にビューにフォームを送信しています。このコードは '$ form = new My_Form(); $ form-> user_id = $ theUserId; 'は私のuser_idのコントローラにあります – networkprofile

1

私はZend_Formが問題だと思います。それはsetとget(__set)のための魔法のメソッドを持っています。あなたのフォームクラスの中にシンプルなセッター/ゲッターを書くようにしてください。

<?php 

protected $userId = null; 

public function setUserId($id) { 
    $this->_userId = $id; 
} 

public function getUserid() { 
    return $this->userId; 
} 

とあなたのコントローラーで:

<?php 

$form = new My_Form(); 
$form->setUserid($id); 
+0

私もこれを試しましたが、何の違いもありません... – networkprofile

関連する問題