sxtuwy 2011-09-06 16:02:29 5767次浏览 6条回复 0 0 0

我是给yii blog添加注册功能的。我是另外添加了一个RegisterForm.php这个模型,在site视图文件夹中添加了一个register.php视图文件。在siteController.php里面添加了一个actionRegister动作,那么如何能实现使用RegisterForm.php的验证,还要使用User模型保存到数据库呢?

  • 回复于 2011-09-06 21:36 举报

    取得用户输入信息,通过RegisterForm验证,关联借User模型表,在控制器里面做相应的添加操作。

  • 回复于 2011-09-06 21:40 举报

    两种方式:
    1.如果是通过继承CFormModel,在类中定义一个reg方法,在控制器中当调用validate通过就调用reg();reg函数中实际上是new了一个user对象
    2.RegisterForm直接从User模型继承,这样reg方法就放到user中

  • 回复于 2011-09-07 07:17 举报

    我是直接使用了User模型的实例进行保存。不过这样的要进行两次验证。一次是registerForm.php里面的验证,一次是User.php模型里面的。我的做法可能和2#一样。3#的第一种方法中,在reg()函数里面new User时,在保存时($model->save())也要进行验证;第二种方法,你的意思可能是说:register extends User{...},这样是不是反倒麻烦的,还不如直接使用User模型了事算了。
    不知道大家还有什么好的办法?

  • 回复于 2011-09-07 22:53 举报
    class UserRegForm extends CFormModel {
        public function rules()
        {
            //定义注册专用规则
        }
        public function reg(){
            //调用User类方法reg插入数据库
        }
    }
    public function actionReg()
    {
        $user = new UserRegForm;
        if (isset($_POST['UserRegForm'])) {
            $user->attributes = $_POST['UserRegForm'];
            if ($user->validate()) { 	//如果表单验证成功
                $user->reg();
            }
        }
    }
    
    

    大体上是这个思路,我习惯了不把表单验证放到ar类里面,不从User类继承,因为场景一多,我总感觉不好控制

  • 回复于 2011-09-07 23:17 举报

    有道理。给力。顶顶。。

  • 回复于 2012-08-21 16:18 举报

    在吗,

    class ContactForm extends CFormModel
    {
        public $DepartureCity;
        public $ArrivalCity;
        public $DepartureDate;
    
    
        /**
        * Declares the validation rules.
        */
        public function rules()
        {
            return array(
                array('DepartureCity, ArrivalCity, DepartureDate', 'required'),
    
            );
        }
    
    }
    
    $model=new ContactForm;
    if(isset($_POST['ContactForm']))
    {
        $model->attributes=$_POST['ContactForm'];
        if($model->validate())
        {
            echo '没有';
        }
    }
    

    这样有问题吗,为什么不起作用

您需要登录后才可以回复。登录 | 立即注册