2012-01-21 18 views
1

私はZend_ElementのbelongsToのプロパティで行うために他のスレッドやバグレポートを見ていないが、私が経験してるものに直接関係は何もしました...ここで奇妙な行動

は(私です単純化された)Zend_Formの:罰金であると要素がそうようにレンダリング

$form = new Zend_Form(); 

$form->addElement('text', 'fname', array('belongsTo' => 'user')); 
$form->addElement('text', 'sname', array('belongsTo' => 'user')); 

<input type="text" name="user[fname]" /> 
<input type="text" name="user[sname]" /> 

...まさに私が欲しいものです。フォームが送信されたときに

しかし、要素の値が...あなたが呼び出す場合は、

$form->getValue('fname') or $form->getValue('sname') 

ないで呼び出した場合にのみアクセス可能です

私は見て期待してい何
$form->getValue('user'); 

$ form-> getValues( 'user')を呼び出すと、値の配列になります。これは予想される動作である場合は、配列にそれらを置くいただきました!ポイント、その後、

$form->getValues(); 

を呼び出す場合 は、値の配列は、はっきりと見えるのですか? "user [fname]"と "client [fname]"の区別はないので、実際には別の項目に属していても "fname"という名前の別の要素を追加すると、前の項目を上書きします。

私が望む結果をもたらすサブフォームを追加しようとしましたが、すべてのサブフォーム要素が一緒にレンダリングされるようになりました。本当に望むのは、 'array'要素をランダムな場所に配置することですこの...

<input type="text" name="user[fname]" /> 
<input type="text" name="some-other-field" /> 
<input type="text" name="some-other-field2" /> 
<input type="text" name="user[sname]" /> 
<input type="text" name="another-field-too" /> 

答えて

2
$form->getValue('fname') or $form->getValue('sname') 

作品このようのgetValue()だけで要素の名前を探している、とあなたelemntsの名前がfnameのSNAMEあるため。私が見たものから、あなたのbelongsToのデータにアクセスするための

Excerpt: Zend/Form.php 
public function getValue($name) 
{ 
    if ($element = $this->getElement($name)) { 
     return $element->getValue(); 
    } 

方法は次のようになります。

$data = $form->getValues(); 
$user=$data['user']; 

これはあなたが欲しいものを行う必要があります。これに基づいて:

Excerpt: Zend/Form.php 
public function getValues($suppressArrayNotation = false) 
    { 
     $values = array(); 
     $eBelongTo = null; 

     if ($this->isArray()) { 
      $eBelongTo = $this->getElementsBelongTo(); 
     } 

     foreach ($this->getElements() as $key => $element) { 
      if (!$element->getIgnore()) { 
       $merge = array(); 
       if (($belongsTo = $element->getBelongsTo()) !== $eBelongTo) { 
        if ('' !== (string)$belongsTo) { 
         $key = $belongsTo . '[' . $key . ']'; 
        } 
       } 
       $merge = $this->_attachToArray($element->getValue(), $key); 
       $values = $this->_array_replace_recursive($values, $merge); 
      } 
     } 
//...Code continues 
return $values; 

希望します。

+0

こんにちはRockyFord - あなたの提案に感謝しますが、それでも意味をなさない - belongsToを設定すると、それが属しているものの子(またはサブフォーム)として要素を設定する必要があります。それ以外の場合は、それを個々の要素として作成するだけであれば、belongsToを設定する必要はありません。 – pavsid

+0

あなたの視点によります。 getValue($ key)は、他の設定にかかわらず、単一の要素の値を返すことを意図しています。 getValues()は、データセットのすべての値を配列として返す手段を提供します。しかし、ZFのクールな部分は、彼らの選択に同意しない場合、それらを変更することです。 Zend/Formを拡張し、独自の関数でgetValue()をオーバーライドします。 – RockyFord