zoukankan      html  css  js  c++  java
  • Yii使用Forms

    1.创建模型

    a.加入基类

         use yii/base/Model

    b.创建类继承自基类

    c.创建所需要的变量

    e.定义规则

    f.注意里面用[]括起来

    例如:

    <?php
    
    namespace appmodels;
    
    use yiiaseModel;
    
    class EntryForm extends Model
    {
        public $name;
        public $email;
    
        public function rules()
        {
            return [
                [['name', 'email'], 'required'],
                ['email', 'email'],
            ];
        }
    }

    该类继承自Yii 提供的一个基类 [[yiiaseModel]],该基类通常用来表示数据

    补充:[[yiiaseModel]] 被用于普通模型类的父类并与数据表无关。[[yiidbActiveRecord]] 通常是普通模型类的父类但与数据表有关联(译注:[[yiidbActiveRecord]] 类其实也是继承自 [[yiiaseModel]],增加了数据库处理)。

    EntryForm 类包含 nameemail 两个公共成员,用来储存用户输入的数据。它还包含一个名为 rules() 的方法,用来返回数据验证规则的集合。上面声明的验证规则表示:

    • nameemail 值都是必须的
    • email 的值必须满足email规则验证

    如果你有一个处理用户提交数据的 EntryForm 对象,你可以调用它的 [[yiiaseModel::validate()|validate()]] 方法触发数据验证。如果有数据验证失败,将把 [[yiiaseModel::hasErrors|hasErrors]] 属性设为 ture,想要知道具体发生什么错误就调用 [[yiiaseModel::getErrors|getErrors]]。

    <?php
    $model = new EntryForm();
    $model->name = 'Qiang';
    $model->email = 'bad';
    if ($model->validate()) {
        // 验证成功!
    } else {
        // 失败!
        // 使用 $model->getErrors() 获取错误详情
    }

    2.创建操作

    下面你得在 site 控制器中创建一个 entry 操作用于新建的模型。操作的创建和使用已经在说一声你好小节中解释了。

    <?php
    
    namespace appcontrollers;
    
    use Yii;
    use yiiwebController;
    use appmodelsEntryForm;
    
    class SiteController extends Controller
    {
        // ...其它代码...
    
        public function actionEntry()
        {
            $model = new EntryForm;
    
            if ($model->load(Yii::$app->request->post()) && $model->validate()) {
                // 验证 $model 收到的数据
    
                // 做些有意义的事 ...
    
                return $this->render('entry-confirm', ['model' => $model]);
            } else {
                // 无论是初始化显示还是数据验证错误
                return $this->render('entry', ['model' => $model]);
            }
        }
    }

    该操作首先创建了一个 EntryForm 对象。然后尝试从 $_POST 搜集用户提交的数据,由 Yii 的 [[yiiwebRequest::post()]] 方法负责搜集。如果模型被成功填充数据(也就是说用户已经提交了 HTML 表单),操作将调用 [[yiiaseModel::validate()|validate()]] 去确保用户提交的是有效数据。

    补充:表达式 Yii::$app 代表应用实例,它是一个全局可访问的单例。同时它也是一个服务定位器,能提供requestresponsedb 等等特定功能的组件。在上面的代码里就是使用 request 组件来访问应用实例收到的 $_POST 数据。

    用户提交表单后,操作将会渲染一个名为 entry-confirm 的视图去确认用户输入的数据。如果没填表单就提交,或数据包含错误(译者:如 email 格式不对),entry 视图将会渲染输出,连同表单一起输出的还有验证错误的详细信息。

    注意:在这个简单例子里我们只是呈现了有效数据的确认页面。实践中你应该考虑使用 [[yiiwebController::refresh()|refresh()]] 或 [[yiiwebController::redirect()|redirect()]] 去避免表单重复提交问题

    3.创建视图

    最后创建两个视图文件 entry-confirmentry。他们会被刚才创建的 entry 操作渲染。

    entry-confirm 视图简单地显示提交的 name 和 email 数据。视图文件保存在 views/site/entry-confirm.php

    <?php
    use yiihelpersHtml;
    ?>
    <p>You have entered the following information:</p>
    
    <ul>
        <li><label>Name</label>: <?= Html::encode($model->name) ?></li>
        <li><label>Email</label>: <?= Html::encode($model->email) ?></li>
    </ul>

    entry 视图显示一个 HTML 表单。视图文件保存在 views/site/entry.php

    <?php
    use yiihelpersHtml;
    use yiiwidgetsActiveForm;
    ?>
    <?php $form = ActiveForm::begin(); ?>
    
        <?= $form->field($model, 'name') ?>
    
        <?= $form->field($model, 'email') ?>
    
        <div class="form-group">
            <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
        </div>
    
    <?php ActiveForm::end(); ?>

    视图使用了一个功能强大的小部件 [[yiiwidgetsActiveForm|ActiveForm]] 去生成 HTML 表单。其中的 begin()end() 分别用来渲染表单的开始和关闭标签。在这两个方法之间使用了 [[yiiwidgetsActiveForm::field()|field()]] 方法去创建输入框。第一个输入框用于 “name”,第二个输入框用于 “email”。之后使用 [[yiihelpersHtml::submitButton()]] 方法生成提交按钮。

    use yiihelpersHtml;
    use yiiwigetsActiveForm;

              记住使用小部件,需要引入这个两个

  • 相关阅读:
    Leetcode 92. Reverse Linked List II
    Leetcode 206. Reverse Linked List
    Leetcode 763. Partition Labels
    Leetcode 746. Min Cost Climbing Stairs
    Leetcode 759. Employee Free Time
    Leetcode 763. Partition Labels
    搭建数据仓库第09篇:物理建模
    Python进阶篇:Socket多线程
    Python进阶篇:文件系统的操作
    搭建数据仓库第08篇:逻辑建模–5–维度建模核心之一致性维度2
  • 原文地址:https://www.cnblogs.com/zs851/p/4151477.html
Copyright © 2011-2022 走看看