Solar_Sql_Model_Record::newForm()方法会为你自动构建表单对象,但是最终你总会要修改或自定义你的表单对象(如,改变文本域的属性)。
首先,你可以告诉newForm()
方法你要在表单中放置哪些记录属性。例如,让我们在页面控制器的动作方法中设置一个仅包含记录name
的表单。
<?php
/**
* @var Acme_Model_Users_Record $this->item A record object.
*/
$this->form = $this->item->newForm(array(
'name_first',
'name_middle',
'name_last',
));
我们也可以覆盖表单元素的描述符。例如,我们可以限制表单中name_middle
元素的宽度为3个字符。
<?php /** * @var Acme_Model_Users_Record $this->item A record object. */ $this->form = $this->item->newForm(array( 'name_first', 'name_middle' => array( 'attribs' => array( 'size' => 3, ) ), 'name_last', ));
但是,我们不应该在控制器逻辑中执行这些操作,通常来说,在返回表单对象之前覆盖newForm()
方法和修改表单对象更好。这样的话,任何要需要表单对象的逻辑都可以使用记录方法,而不需要每次重新自定义表单。
由于某些特殊表单的需要,我们也可以在记录对象上创建额外的方法。这些方法能够在内部自己调用newForm()
去完成大部分繁重的工作。例如:
<?php class Acme_Model_Users_Record { public function newFormOfNames() { $form = $this->newForm(array( 'name_first', 'name_middle' => array( 'attribs' => array( 'size' => 3, ) ), 'name_last', )) return $form; } }