38.表单

来源:互联网 发布:vrsjg用什么软件 编辑:程序博客网 时间:2024/04/30 15:13

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

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

0 0
原创粉丝点击