Genel olarak, FormHelper::input çağrı almost, her zaman ilk parametre aşağıdaki biçimlerden birinde görünecektir:
- Birincil model için, ya da
hasOne ve belongsTo birlikleri: $form->input('Model.field')
hasMany dernekler için: $form->input("Model.{$n}.field")
hasAndBelongsToMany dernekler için: $form->input("Model.Model.{$n}.field")
(Bu durumda, $n, 1, 2, 3, vb (0 Yineleyicinin ), size hasMany birden fazla kayıt eklemek için izin -. ve hasAndBelongsToMany-ilişkili modeller)
Bir Control kaydını, ve MainAttribute tüm kayıtları, ve her birinin tüm kaydetmek istiyorum çünkü özel durum, zor MainAttribute 's {[( 3)]} kayıtları. Bu denetleyicisi bazı veri manipülasyon olmadan mümkün değildir. Ben muhtemelen bu sorunu çözmek istiyorum yolu şudur.
Görünümünde:
echo $form->create('Control', array('action'=>'add'));
echo $form->input('Control.field_name');
$iLimit = 4;
$jLimit = 2;
for ($k=$i=0;$i<$iLimit;$i++) {
echo $form->input("MainAttribute.{$i}.field_name");
for ($j=0;$j<$jLimit;$j++) {
echo $form->input("SubAttribute.{$k}.ixMainAttribute", array('type'=>'hidden','value'=>$i));
echo $form->input("SubAttribute.{$k}.field_name");
$k++;
}
}
echo $form->end('Submit');
In ControlsController,
function add()
{
if (! empty($this->data)) {
// Perform data validation separately...
if ( $this->Control->save( $this->data['Control'], false )) {
foreach ( $this->data['MainAttribute'] as $k => $_data ) {
$_subAttributes = Set::extract("/SubAttribute[ixMainAttribute={$k}]", $this->data);
$insert = array(
'MainAttribute' => am( $_data, array('control_id' => $this->Control->id)),
'SubAttribute' => $_subAttributes
);
$this->Control->MainAttribute->saveAll($insert, array('validate'=>false));
}
}
}
}
HTH.