2012-08-01 75 views
4

我是Yii框架的新手。我想與Yii實施註冊表。 我在其演示項目上檢查博客項目,但沒有註冊表單。 有沒有人知道關於這個問題的教程?使用Yii框架的註冊表格

+0

這是Yii論壇的一篇文章,解釋了代碼 的註冊情況[http://www.yiiframework.com/forum/index.php/topic/27242-registration/](http://www.yiiframework.com/ forum/index.php/topic/27242-registration /) – 2012-10-19 20:21:50

回答

1

使用CActiveForm很容易用yii創建表單。

下面是使用CAvtiveForm一個警予文檔的鏈接:: Yii CActiveForm

0
  • 必須創建登記表(見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)); 
        } 
    } 
    
4

首先,創建一個表用戶。使用gii生成基於此表的用戶模型和控制器,然後根據自己的喜好調整代碼。裏面的用戶控制器創建一個函數來辦理登記:

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類中做所有與DB相關的數據。

您可能會注意到我沒有在這裏調用$ model-validate()。這是因爲$ model-> save()也會調用驗證方法。更多信息:http://www.yiiframework.com/doc/api/1.1/CActiveRecord#save-detail

+0

數據沒有插入到數據庫中,當我點擊註冊按鈕時,它只是重新加載。 – micky 2016-06-24 10:37:26

5

用於註冊系統。

您應該按照步驟操作。

  1. 1您可以根據需要創建表格用戶/註冊/註冊表。
  2. 現在創建CRUD,以便您可以輕鬆地將數據插入到用戶表中。

我有一個表,它有五種不同的領域,即ID,姓名,conatct_no,電子郵件,密碼

  1. 現在你創建鑑於其命名爲「註冊」的文件夾。
  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控制器文件。

registerController.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. 現在,您需要爲您的驗證模型文件。 RegisterForm.php

    class RegisterForm extends CFormModel { public $ contact_no; public $ name; public $ email; public $ password; public $ retypepassword;

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

    公共職能規則(){ 回報陣列( 陣列( '要求')的名字,contact_no,電子郵件,密碼,retypepassword', 陣列(的姓名,電子郵件,密碼,retypepassword',' array'('contact_no','length','max'='200'), array('email','email','message'=>'請插入有效的電子郵件地址'), array array'('password','compare','compareAttribute'=>'retypepassword'), array('> 30), array('retypepassword','required','on'=>'Register'), array, id,name,contact_no,email','safe','on'=>'search'), ); }}

您還需要改變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/

感謝。