1

我知道这是一个简单而蹩脚的问题,但仍然如此。

我有一个不应该显示所有模型字段的表单,而只显示其中的一些。这就是我不能使用 Form->setModel($m) 的原因,因为它会自动将所有字段添加到 Form 中。

所以我将模型添加到页面中,然后将表单添加到页面中,然后像这样使用 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() 将不起作用。基本上我尝试的任何方法都不起作用,因为 Form 没有关联的模型(带有 setModel)。

4

3 回答 3

1

I have solution for mixed form. Add custom form fields in form init and manipulate with them by hooks ('afterLoad','beforeSave') In this case you can use setModel() method

$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'));
    }
}

There is a hook 'validate' as well in Form_Basic::submitted(), so you can add

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

and validate your data in Form::validateCustomData()

于 2012-12-19T17:48:06.753 回答
1

这条路怎么样?

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

于 2012-10-19T11:36:20.703 回答
0

为什么不在模型中将字段设置为隐藏?

IE:

类 Model_Example 扩展 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 回答