6.8 自定义记录元素

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;
    }
}