yii用户操作

打开protected\models\User.php文件, 修改我们的User Model.
首先修改Model指向的表名, 将tableName()里面return的内容改成users, 如下:

public function tableName() {
        return 'users';
}

用户注册的时候, 我们需要用户来输入他喜欢的密码, 需要一个密码确认的字段, 为了防止机器人程序恶意注册,我们还需要一个验证码字段, 所以要在User这个类里加入2个属性: passwordConfirm和verifyCode,代码如下:

  public $passwordConfirm;
        public $verifyCode;

下面我们来添加User的字段验证规则.根据我们的需求, username, password, passwordConfirm,email和verifyCode都是必填项, 所以需要添加如下的规则:
array(‘username, password, passwordConfirm, email, verifyCode’,‘required’)
另外, 我们希望用户名和nickname唯一, 就需要添加以下的规则:
array(‘username’, ‘unique’),
array(‘nickname’, ‘unique’)
注册的时候, 用户需要输入两遍密码以确保没有把密码输错, 这里就需要passwordConfirm字段的值等于password了,可以使用以下的规则:
array(‘passwordConfirm’, ‘compare’, ‘compareAttribute’=> ‘password’)
这个规则的意思是, passwordConfirm的值必须与password相同.
这样, 我们完成好的验证规则就应该像下面的代码:

  public function rules() {
                return array(
                        array('username, password, passwordConfirm, email, verifyCode', 'required'),
                        array('username', 'unique'),
                        array('username', 'length', 'min' => 5, 'max' => 12),
                        array('password', 'length', 'min' => 5, 'max' => 12),
                        array('nickname', 'length', 'min' => 4, 'max' => 20),
                        array('nickname', 'unique'),
                        array('verifyCode', 'captcha'),
                        array('passwordConfirm', 'compare', 'compareAttribute' => 'password'),
                );
        }

Yii的model里有个特殊的地方就是, 它可以保护字段的安全性,所有放在safeAttributes()方法里的字段被认为是可以访问和修改的, 不在里面的字段则是需要保护的,所以我们需要将我们刚才的字段都放进这个方法里, 如下:

  public function attributeLabels() {
                return array(
                        'username' => '用户名',
                        'password' => '密码',
                        'passwordConfirm' => '密码确认',
                        'email' => '邮件地址',
                        'nickname' => '昵称',
                        'verifyCode' => '验证码'
                );
        }

好了, 现在我们已经有了一个完善的字段验证规则, 又确保了我们的字段是可以访问的, 现在该修改controller文件了.打开protected/controllers/UserController.php文件, 创建一个新的方法register,根据yii的规则, 所有允许用户访问的的action方法必须以action开头,所以我们创建的方法名字应该是actionRegister()了.

书写该方法的方法体, 首先我们需要创建一个form, 这个form是一个Model的实例, 因为我们的目的是注册一个用户,所以这个form需要是User的实例, 用以下代码:
$form = new User;
这个form建好后, 没有任何属性, 但是已经可以使用了, 我们需要将它传到view里去显示它, 以便让用户填写自己的信息,使用代码:
$this->render(‘register’, array(‘form’=> $form));
将$form传到register试图并命名为form.

在protected/views/user目录下创建register.php文件, 内容如下:

<h2>新用户注册</h2>
 
<?php echo CHtml::beginForm(); ?>
 
<?php echo CHtml::errorSummary($form); ?>
 
<p>
        <?php echo CHtml::activeLabelEx($form, 'username'); ?>
        <?php echo CHtml::activeTextField($form, 'username', array('size' => 20, 'maxlength' => 12)); ?>
</p>
<p>
        <?php echo CHtml::activeLabelEx($form, 'password'); ?>
        <?php echo CHtml::activePasswordField($form, 'password', array('size' => 20, 'maxlength' => 12)); ?>
</p>
<p>
        <?php echo CHtml::activeLabelEx($form, 'passwordConfirm'); ?>
        <?php echo CHtml::activePasswordField($form, 'passwordConfirm', array('size' => 20, 'maxlength' => 12)); ?>
</p>
<p>
        <?php echo CHtml::activeLabelEx($form, 'email'); ?>
        <?php echo CHtml::activeTextField($form, 'email', array('size' => 20)); ?>
</p>
<p>
        <?php echo CHtml::activeLabelEx($form, 'nickname'); ?>
        <?php echo CHtml::activeTextField($form, 'nickname', array('size' => 20, 'maxlength' => 12)); ?>
</p>
 
<p>
        <label>&nbsp;</label>
        <?php $this->widget('CCaptcha'); ?>
</p>
 
<p>
        <?php echo CHtml::activeLabelEx($form, 'verifyCode'); ?>
        <?php echo CHtml::activeTextField($form, 'verifyCode'); ?>
</p>
 
<p>
        <label>&nbsp;</label>
        <?php echo CHtml::submitButton('注册'); ?>
</p>
 
<?php echo CHtml::endForm(); ?>

里面调用了Yii提供的方法来创建我们需要的HTML标签,有一个需要注意的地方就是里面使用$this->widget(‘CCaptcha’);
来显示一个验证码, 用它的时候, 我们需要在controller里声明它, 声明的方法如下:

  public function actions() {
                return array(
                        'captcha'=>array(
                                'class' => 'CCaptchaAction',
                                'backColor' => 0xCCCCCC,
                                'testLimit' => 1,
                        ),
                );
        }

这样,我们就可以在view里使用验证码了, 怎么样, 赶紧去试试吧, 访问url:

http://localhost/index.php?r=user/register

怎么?显示你没有权限访问该action, 嘿嘿, 这就对了, 在Yii的世界里, 任何一个action在被访问的时候,都会检查它的权限的, 我们只需要到controller里找到accessRules()方法, 在’user’=> array(‘*’)的这个array里, 将我们的action加进入, 就可以顺利访问了,比如说:

                  array('allow',  // allow all users to perform 'list' and 'show' actions
                                'actions' => array('register', 'login', 'logout', 'captcha'),
                                'users' => array('*'),
                        ),

注意, 要在view里显示captcha, 也必须把captcha action加进去.
回到浏览器重新刷新一下, 怎么样, 我们的表单出来了吧.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值