我是 Yii 框架的新手。我想用 Yii 实现一个注册表单。我在其演示项目上查看了博客项目,但它没有注册表单。有谁知道关于这个问题的教程?
4 回答
对于注册系统。
您应该按照这些步骤操作。
- 首先,您根据需要创建表用户/注册/注册。
- 现在为此创建 CRUD,以便您可以轻松地将数据插入用户表中。
我有一个表,它有五个不同的字段,即 id、name、conatct_no、email、password
- 现在您在视图中创建一个文件夹,命名为“register”。
- 鉴于您刚刚制作了一个文件 index.php 和 register.php
- 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 -->
- 现在您需要一个用于注册的控制器文件,即 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));
}
}
现在您需要一个模型文件来进行验证。注册表格.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/
谢谢。
首先,为用户创建一个表。使用 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
使用 CActiveForm 用 yii 创建表单很容易。
这是 yii 文档的链接 :: Yii CActiveForm
- 您必须使用 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)); } }