Yii中在没有ActiveRecord的情况下给你的CForm设置model
刚刚写的一个扩展,已经发布在Yii扩展中心了。
当你使用form builder来创建一个表单的时候,你必须传送一个数组和一个model给CForm。
$array = include('blogEditForm.php'); // blogEditForm.php return a array
$model = new BlogActiveRecord();
$form = CForm($array, $model);
//after this you can use $form and display it
$form->render();
但是,如果$model不是一个CModel就不行了。比如说,你想储存一些信息到文件里,或者储存到一个表的一个字段里面。就不像有一个CActiveRecord那么简单了。
这个时候,为什么不使用一个数组来通过来生成model,就像用一个数组通过CForm生成一个表单一样呢。于是我写了一个简单的类来实现这个功能。
首先,写一个类似CForm的配置文件,返回数组。
return array(
'email_address'=>array(
'type'=>'text',
'label'=>'The email address',
'default'=>'you@example.com',
'rules'=>array(
array('email', 'email'),
),
// other attribute for CForm
),
// other fields
);
这个数组就是在CForm的配置文件的基础上增加了label、default和rules。而且只返回elements,不返回其他的。
接下来创建一个Model文件
Yii::import('ext.XVirtualModel');
class YourVirtualModel extends XVirtualModel
{
//override save()
public function save()
{
//save the data in your way
//data is stored in $this->_values
}
//override loadValues()
public function loadValues()
{
//load the data in your way
}
}
你需要重写上面的这两个函数,在原文件中有注释可以参考。
接下来你就可以使用了:
$config = 'application.config.YourVirtualModel';
Yii::import('application.extensions.YourVirtualModel');
$model = new YourVirtualModel($config);
//$model->formMap 返回可以用于CForm的配置数组,不过返回的数组只有elements,所以你需要添加action等
$formMap = $model->formMap;
$formMap['action'] = array('save');
$formMap['title'] => 'Input your email here';
$form = new CForm($formMap, $model);
//随便使用吧
下载之后看看源代码就知道这个类是多么简单了,用起来也不难。
发表评论
| Trackback

