我知道这是一个简单而蹩脚的问题,但仍然存在。
我有一个表格,不应该显示所有模型字段,但只显示其中的一些。这就是为什么我不能使用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)。
答案 0 :(得分:1)
这样怎么样?
$ your_form->则setModel($模型,阵列( '名称', '电子邮件', '年龄'));
答案 1 :(得分:1)
我有混合形式的解决方案。在表单init中添加自定义表单字段,并通过钩子('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()中也有一个钩子'验证',所以你可以添加
$this->addHook('validate',array($this,'validateCustomData'));
并在Form :: validateCustomData()
中验证您的数据答案 2 :(得分:0)
为什么不将字段设置为隐藏在模型中?
即:
class 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);