首页 > 学院 > 开发设计 > 正文

38.表单

2019-11-06 06:10:42
字体:
来源:转载
供稿:网友

创建模型 这里写图片描述 这里写图片描述 这里写图片描述

class LoginForm extends CFormModel{ public $username; public $passWord; public $rememberMe=false;}

这里写图片描述

class LoginForm extends CFormModel{ public $username; public $password; public $rememberMe=false; PRivate $_identity; public function rules() { return array( array('username, password', 'required'), array('rememberMe', 'boolean'), array('password', 'authenticate'), ); } public function authenticate($attribute,$params) { $this->_identity=new UserIdentity($this->username,$this->password); if(!$this->_identity->authenticate()) $this->addError('password','错误的用户名或密码。'); }}

这里写图片描述

/** * @param string 所要验证的特性的名字 * @param array 验证规则中指定的选项 */public function ValidatorName($attribute,$params) { ... }

这里写图片描述 这里写图片描述

// 用户名为必填项array('username', 'required'),// 用户名必须在 3 到 12 个字符之间array('username', 'length', 'min'=>3, 'max'=>12),// 在注册场景中,密码password必须和password2一致。array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'),// 在登录场景中,密码必须接受验证。array('password', 'authenticate', 'on'=>'login'),

这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述


创建动作 这里写图片描述

public function actionLogin(){ $model=new LoginForm; if(isset($_POST['LoginForm'])) { // 收集用户输入的数据 $model->attributes=$_POST['LoginForm']; // 验证用户输入,并在判断输入正确后重定向到前一页 if($model->validate()) $this->redirect(Yii::app()->user->returnUrl); } // 显示登录表单 $this->render('login',array('model'=>$model));}

这里写图片描述


创建表单 这里写图片描述

<div class="form"><?php echo CHtml::beginForm(); ?> <?php echo CHtml::errorSummary($model); ?> <div class="row"> <?php echo CHtml::activeLabel($model,'username'); ?> <?php echo CHtml::activeTextField($model,'username') ?> </div> <div class="row"> <?php echo CHtml::activeLabel($model,'password'); ?> <?php echo CHtml::activePasswordField($model,'password') ?> </div> <div class="row rememberMe"> <?php echo CHtml::activeCheckBox($model,'rememberMe'); ?> <?php echo CHtml::activeLabel($model,'rememberMe'); ?> </div> <div class="row submit"> <?php echo CHtml::submitButton('Login'); ?> </div><?php echo CHtml::endForm(); ?></div><!-- form -->

这里写图片描述

<div class="form"><?php $form=$this->beginWidget('CActiveForm'); ?> <?php echo $form->errorSummary($model); ?> <div class="row"> <?php echo $form->label($model,'username'); ?> <?php echo $form->textField($model,'username') ?> </div> <div class="row"> <?php echo $form->label($model,'password'); ?> <?php echo $form->passwordField($model,'password') ?> </div> <div class="row rememberMe"> <?php echo $form->checkBox($model,'rememberMe'); ?> <?php echo $form->label($model,'rememberMe'); ?> </div> <div class="row submit"> <?php echo CHtml::submitButton('Login'); ?> </div><?php $this->endWidget(); ?></div><!-- form -->

收集表格输入 这里写图片描述

public function actionBatchUpdate(){ // 假设每一项(item)是一个 'Item' 类的实例, // 提取要通过批量模式更新的项 $items=$this->getItemsToUpdate(); if(isset($_POST['Item'])) { $valid=true; foreach($items as $i=>$item) { if(isset($_POST['Item'][$i])) $item->attributes=$_POST['Item'][$i]; $valid=$valid && $item->validate(); } if($valid) // 如果所有项目有效 // ...则在此处做一些操作 } // 显示视图收集表格输入 $this->render('batchUpdate',array('items'=>$items));}准备好了这个动作,我们需要继续 batchUpdate 视图的工作以在一个 HTML 表格中显示输入项。<div class="form"><?php echo CHtml::beginForm(); ?><table><tr><th>Name</th><th>Price</th><th>Count</th><th>Description</th></tr><?php foreach($items as $i=>$item): ?><tr><td><?php echo CHtml::activeTextField($item,"[$i]name"); ?></td><td><?php echo CHtml::activeTextField($item,"[$i]price"); ?></td><td><?php echo CHtml::activeTextField($item,"[$i]count"); ?></td><td><?php echo CHtml::activeTextArea($item,"[$i]description"); ?></td></tr><?php endforeach; ?></table><?php echo CHtml::submitButton('Save'); ?><?php echo CHtml::endForm(); ?></div><!-- form -->注意,在上面的代码中我们使用了 "[$i]name" 而不是 "name" 作为调用 CHtml::activeTextField 时的第二个参数。如果有任何验证错误,相应的输入项将会自动高亮显示,就像前面我们讲解的单模型输入一样。

使用表单生成器 http://www.yiichina.com/doc/guide/1.1/form.builder


http://www.yiichina.com/doc/guide/1.1/form.model


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表