lxholding
(Lxholding)
1
刚使用yii框架还不是太熟悉,想请教一下为什么要分CActiveRecord和CFormModel呢?今天在做表单的时候发现用 CActiveRecord也可以用于生成和验证表单,但是有个问题一旦new 一个CActiveRecord的时候就会自动的创建数据库连接而不是在第一次执行sql时才创建变成在生成表单的时候也连接一次数据库,看来只有使用CFormModel才对,但这样一来验证数据的部分就重复了,这意思是鼓励在使用CActiveRecord之前就应该完成所有的验证吗?不知道这两个类设计的初衷是什么呢?为什么需要分开,谢谢。
richie
(Richie Liu9)
2
CAR的目的在于数据的持久化(保存到数据库),CFM的目的在于数据传输(传输完了就没了)。
其实在现实的项目中仅仅使用其中任何一个都不能完善的解决用户的输入数据处理。
看实际情况吧!有时候用CAR好些,有时候用CFM好些,有时候需要同时使用两者!
呵呵,有点废话了!
lxholding
(Lxholding)
3
谢谢,还是有些疑问,在CFormModel中如何验证某个字段的值是否重复呢?如果在CActiveRecord中只要设定“unique”验证就可以了,但是在CFormModel中就会直接抱1062 mysql错误提示。还有一个问题,比如手册中一个嵌套子表单的例子如下,
public function actionRegister()
{
$form = new CForm(’application.views.user.registerForm’);
$form[’user’]->model = new User;
$form[’profile’]->model = new Profile;
if($form->submitted(’register’) && $form->validate())
{
$user = $form[’user’]->model;
$profile = $form[’profile’]->model;
if($user->save(false))
{
$profile->userID = $user->id;
$profile->save(false);
$this->redirect(array(’site/index’));
}
}
$this->render(’register’, array(’form’=>$form));
}
这里使用了两个实体User和Profile,等于说就算不是提交的情况下,没次生成视图的时候都会连接一次数据库,这个实在觉得不太妥当啊…,不知道是否有方法能够避免?