4

我是 Yii 框架的新手。我想用 Yii 实现一个注册表单。我在其演示项目上查看了博客项目,但它没有注册表单。有谁知道关于这个问题的教程?

4

4 回答 4

6

对于注册系统。

您应该按照这些步骤操作。

  1. 首先,您根据需要创建表用户/注册/注册。
  2. 现在为此创建 CRUD,以便您可以轻松地将数据插入用户表中。

我有一个表,它有五个不同的字段,即 id、name、conatct_no、email、password

  1. 现在您在视图中创建一个文件夹,命名为“register”。
  2. 鉴于您刚刚制作了一个文件 index.php 和 register.php
  3. register.php 是您的表单。你可以做的。

注册.php

<h2>Registration Form</h2>
<div class="form">
<?php echo CHtml::beginForm(); ?>

    <?php echo CHtml::errorSummary($model); ?>

    <div class="row">
        <?php echo CHtml::activeLabel($model,'Name'); ?>
        <?php echo CHtml::activeTextField($model,'name') ?>
    </div>


    <div class="row">
        <?php echo CHtml::activeLabel($model,'Contact Number'); ?>
        <?php echo CHtml::activeTextField($model,'contact_no') ?>
    </div>

    <div class="row">
        <?php echo CHtml::activeLabel($model,'email'); ?>
        <?php echo CHtml::activeTextField($model,'email') ?>
    </div>

    <div class="row">
        <?php echo CHtml::activeLabel($model,'password'); ?>
        <?php echo CHtml::activePasswordField($model,'password') ?>
    </div>

    <div class="row">
        <?php echo CHtml::activeLabel($model,'Retype Password'); ?>
        <?php echo CHtml::activePasswordField($model,'retypepassword') ?>
    </div>

    <div class="row submit">
        <?php echo CHtml::submitButton('Register'); ?>
    </div>

    <?php echo CHtml::endForm(); ?>
</div><!-- form -->
  1. 现在您需要一个用于注册的控制器文件,即 registerController.php。

注册控制器.php

class registerController extends Controller
{
  public  function actionIndex() {
    $this->render('index');
  }

  public function actionRegister() {
    $model   = new RegisterForm ;
    $newUser = new User;

if(isset($_POST['RegisterForm'])) {
      $model->attributes = $_POST['RegisterForm'];
      if($model->validate()) {
      $newUser->name = $model->name ;
      $newUser->contact_no = $model->contact_no;
      $newUser->email = $model->email;
      $newUser->password = $model->password;
      if($newUser->save()) {
       $this->_identity = new UserIdentity($newUser->email,$newUser->password);
        if($this->_identity->authenticate())
         Yii::app()->user->login($this->_identity);
         $this->redirect(Yii::app()->user->returnUrl);
        }
      }
    }
$this->render('register',array('model'=>$model));
  }
}
  1. 现在您需要一个模型文件来进行验证。注册表格.php

    类 RegisterForm 扩展 CFormModel { public $contact_no ; 公共 $name ; 公共$电子邮件;公共$密码; 公共$重新输入密码;

    公共函数表名(){返回“用户”;}

    public function rules() { return array(array('name, contact_no, email, password, retypepassword', 'required'), array('name, email, password, retypepassword', 'length', 'max'=>200 ), array('email', 'email', 'message'=>'请插入有效的电子邮件'), array('contact_no', 'length', 'max'=>30), array('retypepassword', ' required', 'on'=>'Register'), array('password', 'compare', 'compareAttribute'=>'retypepassword'), array('id, name, contact_no, email', 'safe', ' on'=>'搜索'), ); } }

您还需要更改受保护/组件目录中的 UserIdentity.php 文件。

class UserIdentity extends CUserIdentity
{
  private $_id ;

  public function authenticate()
  {
    $email = strtolower($this->username);
    $user = User::model()->find('LOWER(email)=?',array($email));
    if($user === null)
     $this->errorCode = self::ERROR_USERNAME_INVALID ;
    else if(!$user->password === $this->password)
     $this->errorCode = self::ERROR_PASSWORD_INVALID ;
    else {
     $this->_id = $user->id ;
     $this->username = $user->email ;
     $this->errorCode = self::ERROR_NONE ;
    }
     return $this->errorCode == self::ERROR_NONE ;
     return !$this->errorCode;
   }

   public function getId() {
    return $this->_id ;
   }    
} 

而已。

这是一个完整的注册表设置,我自己做了。

如果您是第一个计时器,那么您需要了解控制器如何工作以及控制器如何与视图和模型交互。如果您已经熟悉它,那么您可以轻松地使用自己的注册系统。

这是帮助您理解 yii 的链接。

http://www.yiiframework.com/screencasts/

谢谢。

于 2013-11-01T11:52:52.807 回答
4

首先,为用户创建一个表。使用 gii 基于此表生成用户模型和控制器,并根据自己的喜好调整代码。在 User 控制器内部创建一个函数来处理注册:

function actionRegister() {
    $model = new User('register');

    // collect user input data
    if(isset($_POST['User']))
    {
        $model->attributes=$_POST['User'];

        // validate user input and redirect to the previous page if valid
        $model->setAttributes(array(
            'datereg' => time(), //additional data you want to insert
            'lastlogin' => time() //additional

        ));

        if($model->save())
        {
                           //optional 
            $login=new LoginForm;
            $login->username = $_POST['User']['username'];
            $login->password = $_POST['User']['password'];
            if($login->validate() && $login->login())
                $this->redirect('/pages/welcome');
        }

    }
    else
       // display the registration form
       $this->render('register',array('model'=>$model));
    }

您必须有一个有效的视图文件 (register.php)

$login=new LoginForm;
$login->username = $_POST['User']['username'];
$login->password = $_POST['User']['password'];
if($login->validate() && $login->login())
$this->redirect('/pages/welcome');

此代码块“验证”用户并在成功注册后立即登录。它使用 CUserIdentity。$login->login() 对密码进行哈希处理。

此外,在将数据插入表之前,您必须有类似的东西来处理数据

    public function beforeSave() {

    if(parent::beforeSave() && $this->isNewRecord) {

        $this->password = md5($this->password);

    }

    return true;
}

在控制器内部散列密码也可以。但是我想在 Model 类中做所有与数据库相关的事情。

你可能注意到我没有在这里调用 $model-validate() 。这是因为 $model->save() 也调用了验证方法。更多信息:http ://www.yiiframework.com/doc/api/1.1/CActiveRecord#save-detail

于 2012-08-02T03:56:11.217 回答
1

使用 CActiveForm 用 yii 创建表单很容易。

这是 yii 文档的链接 :: Yii CActiveForm

于 2012-08-01T05:18:17.867 回答
0
  • 您必须使用 CAvtiveForm 创建注册表单(例如,请参阅 LoginForm)。
  • 创建您的用户模型。
  • 创建控制器:

    class UsersController extends Controller
    {
         public function actionSignup()
         {
            $model = new RegistrationForm;
    
            if (isset($_POST['RegistrationForm'])) {
                 if ($model->validate()) {
                     $user = new Users;
                     $user->populateRecord($form->attributes);
                     $user->save();
                     $this->redirect(Yii::app()->createUrl('/'));
                 }
            }
    
            $this->render('signup', array('model' => $model));
         }
     }
    
于 2012-08-01T06:47:18.903 回答