CakePHP formu $ options ['seçenekler']

2 Cevap php

Hey! Burada toplam CakePHP çaylak.

Altındaki Güncelleme \ /

Bu tür bir iki kat sorudur. Ben formda aşağı (seçim) alanı, bir damla kullanmak istiyorum user nesneleri eklemek için kullanılan bir görünümde.

Her user ait bir ben bir kullanıcı eklediğinizde group bu yüzden ben bu kullanıcı muhtemelen katılabileceğini gruplarının tümünü içeren bir açılır istiyorum. Şu anda group_id alan bir TextField olduğunu. Ben bir seçim alanı olmasını zorlamak için nasıl biliyorum, ama ben programlı gruplarının adları ile seçim doldurmak için nasıl bilmiyorum.

Cari yöntem:

echo $form->input('group_id', array(
    '1' => 'NameOfGroup1',
    '2' => 'NameOfGroup2',
    '3' => 'NameOfGroup3')
    );

Ben programlı olsa seçenekler dizisini oluşturmak istiyorum.

echo $form->input('group_id', $this->Group->find('list'));

Bu olsa çalışmaz. Ben bir hata alıyorum:

Undefined property: View::$Group [APP/views/users/add.ctp, line 8]

Benim için bu benim kullanıcının bakış içeriden Group nesneye erişimi yok demektir.

Bunu nasıl yapabilirsiniz? Yine, ben gruplar eklemek ya da çıkarmak gibi güncellemeleri böylece programlı yapmak istiyorum.

EDIT: Bu neden çalışmıyor?

// In views/users/someaction.ctp
echo $form->input('group_id',
                  array('options' => $this->formOptionsGroups)
                  );

// In controllers/users_controller.php
function someaction() {
    // Any other logic
    $this->set('formOptionsGroups', $this->Group->find('list'));
}

Hata Grup tanımlanmamış bir nesne olmasıdır.

2 Cevap

Ben daha zarif olurdu size it.That ihtiyacınız kullanıcı eklemek sayfa atamak sonra kolayca kullanıcıların denetleyicisi grouplist alabilirsiniz situation.Because yılında requestAction işlevini kullanmak gerekli değildir düşünüyorum .

BTW, about requestAction yemek kitabı: requestAction is best used in conjunction with (cached) elements – as a way to fetch data for an element before rendering.

E.g

/*code In the your user-add action of the users controller*/
function useradd()
{
    ......
    //your ownstuff skipped

    $grouplist = $this->User->Group->find('list');
    $this->set("grouplist",$grouplist);   
}

Sonra useradd eylem sizin görünümünde:

echo $form->input('group_id', $grouplist);

Sorun ben denetleyicisi eylemi talep nasıl oldu.

Doğru bir uygulamasıdır:

echo $form->input('group_id', 
                  array('options' => $this->requestAction(array('controller' => 'groups', 'action' => 'formSelectOptions')))
                  );

Ve sonra grupları denetleyicisi:

// formSelectOptions() returns array for use with a form $options['options']
function formSelectOptions() {
    return $this->Group->find('list');
}