CakePHP'nin formu yardımcı için fieldname benim seçim düzgün çalışmıyor, neden?

1 Cevap php

Ben bir AJAX formu oluşturma. Sorun formhelper ile bir giriş formu oluşturmak için çalışıyorum, benim girişin adı özelliği doğru görünümünde renedered değildir. İşte benim kod:

$form->input('MainAttribute.'.$i.'.SubAttribute.'.$j.'.score', array('label' => '', 'options' => $scores));

Ben SubAttribute MainAttribute içinde olmak istiyorum çünkü ben bu şekilde oluşturulur. Ben HTML incelemek, formun adı niteliği benzeri kesilmiş olduğunu:

name="data[SuperMainAttribute]"

How can I specify the name attribute to the one that I'm planning on doing? (e.g. data[MainAttribute][0][SubAttribute][0][score])

Edit:

İşte benim modeli ilişkiler şunlardır:

Kontrol hasMany MainAttribute

MainAttribute hasMany SubAttribute

Ctp Kontrol Controller bir görünümde olduğunu

1 Cevap

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.