1

私はそれがちょっと単純で不自由な質問であることを知っていますが、それでも.

すべてのモデル フィールドを表示するのではなく、一部のみを表示するフォームがあります。そのため、Form->setModel($m) を使用できません。これにより、すべてのフィールドが自動的にフォームに追加されるからです。

モデルをページに追加し、フォームをページに追加してから、次のように form->importFields を使用します。

$m = $p->add('Model_Example');
$f = $p->add('Form');
//$f->setModel($m); // can't use this because that'll import all model fields
$f->importFields($m,array('id','description'));
$f->addSubmit('Save');

この状況で理解できないのは、 onSubmit イベントの $f->update() が機能しないため、このデータをデータベースに保存する方法です。フォームにはモデルが関連付けられていないため(setModelを使用)、基本的に私が試したものは何も機能しません。

4

3 に答える 3

1

この方法はどうですか?

$ your_form-> setModel($ model、array('name'、'email'、'age'));

于 2012-10-19T11:36:20.703 に答える
1

混合形式の解決策があります。フォーム初期化にカスタム フォーム フィールドを追加し、フック ('afterLoad'、'beforeSave') で操作します。この場合、setModel() メソッドを使用できます。

$form->setModel('Some_Model',array('title','description'));


class Form_AddTask extends Form {
    function init(){
        parent::init();
        $this->r=$this->addField('autocomplete/basic','contact');
        $this->r->setModel('ContactEntity_My');
    }
    function setModel($model,$actual_fields=undefined){
        parent::setModel($model,$actual_fields);
        $this->model->addHook('afterLoad',array($this,'setContactId'));
        $this->model->addHook('beforeSave',array($this,'setContactEntityId'));
        return $this->model;
    }

    // set saved value for editing
    function setContactId() {
        $this->r->set($this->model->get('contact_entity_id'));
    }
    function setContactEntityId() {
        $this->model->set('contact_entity_id',$this->get('contact'));
    }
}

Form_Basic::submitted() にもフック 'validate' があるので、追加できます

    $this->addHook('validate',array($this,'validateCustomData'));

Form::validateCustomData() でデータを検証します

于 2012-12-19T17:48:06.753 に答える
0

モデルでフィールドを非表示に設定しないのはなぜですか?

すなわち:

class Model_Example extends Model_Table { public $table='assessment';

function init() {
    parent::init();

    $grant->addField('hidden_field')->hidden(true);
}

}

その後:

$m = $p->add('Model_Example');
$f = $p->add('Form');
$f->setModel($m);
于 2012-09-28T19:15:00.553 に答える