资讯专栏INFORMATION COLUMN

yii2中表单的几种写法

cpupro / 3293人阅读

摘要:与关联的表单中常规的表单,基于创建的表单类,需要一个继承自的类,比如有一个保证金初始化表单,可能需要一个保证表单类保证金初始化在初始化表单的视图中,我们需要创建关联的表单。

与Model关联的ActiveForm表单

yii2中常规的表单,基于yiiootstrapActiveForm创建的表单类,需要一个继承自yiiaseModel的ModelForm类,比如有一个保证金初始化表单,可能需要一个保证表单类(DepositInitForm):

model
namespace backendmodels;

use Yii;
use yiiaseModel;

/**
 * Login form
 * 保证金初始化
 */
class DepositInitForm extends Model
{
    public $type;
    public $id;
    public $uid;

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [["type", "id", "uid"], "safe"],
            [["id"], "required"],
        ];
    }
}

在初始化表单的view视图中,我们需要创建关联的表单。关联表单的几个好处:

表单的验证

表单在修改的时候自动填充

减少代码量

bootstrap提供的自适应特性

view

在init.php视图中我们可以这样创建表单:

 "deposit-init-form", "layout" => "inline", "method" => "post", "action" => Url::to("deposit/init")]);
    echo $form->field($model, "type")->dropDownList(["0" => "选择拍卖类型", "1" => "拍场", "2" => "拍品"]);
    echo $form->field($model, "id")->textarea(["placeholder" => "请输入拍场id或者拍品id"]);
    // 此处用了hidden表单,以后扩展根据用户uid查询
    echo $form->field($model, "uid")->textarea(["placeholder" => "请输入添加白名单用户id,多个用逗号分隔"]);
    echo Html::button("初始化", ["class" => "btn btn-danger init"]);
    echo Html::button("查询", ["class" => "btn btn-default query"]) ?>
    ActiveForm::end();
?>
controller

在DespositController控制器中可以这样写:

/**
 * 白名单,保证金
 */
public function actionInit(){
    $model = new ackendmodelsDepositInitForm;

    $model->type = 1; // 下拉列表默认选中设置
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        // TODO 处理业务逻辑
        ...
    }
    return $this->render("init",["model" => $model]);
}
基于Html帮助类创建表单

有时候,我们并不想关联一个model,比如我们需要调用rest服务的时候,我们只是想把表单的数据提交到一个url请求去,此时,我们可以选择yiihelpersHtml帮助类,创建一个简单的表单:

view
 "page-conversion-form", "class" => "form-inline", "role" => "form"]); ?>
"所有订单", "1" => "普通订单", "2" => "拍卖订单"], ["class" => "form-control"]); ?>
"btn btn-default"]); echo Html::endForm(); // ... ?>

这里写了一个简单的根据订单类型统计转化率的表单,该表单并不复杂,只有一个下拉列表,所以没必要创建一个表单,再者,没必要对type做校验,如果没有传递该参数,控制器中作默认为0的处理。

controller

在StatisticsController控制器中,创建actionConversionRate操作:

 public function actionConversionRate()
 {
        $query["page"] = isset($_GET["page"]) ? intval($_GET["page"]) : 1;
        $query["perpage"] = isset($_GET["per-page"]) && $_GET["per-page"] ? $_GET["per-page"] : 15;
        // type不传递的时候,默认为0,为了在页面显示选择类型,并将其传递到view做视图的渲染
        $query["type"] = isset($_GET["type"]) ? intval($_GET["type"]) : 0;
        $api = rtrim(Yii::$app->params["statisticsUrl"], "/") . "/statistics/";
        $url = $api . "getConversionRate?" . http_build_query($query);
        $data = AppHelper::getData($url);
        $count = AppHelper::getData($api . "getRateCount?type=" . $query["type"]);

        // 这里面的是一个数据提供器,先不关心
        $dataProvider = new ackendextensionsArrayDataProvider(
            [
                "allModels" => $data,
                "totalCount" => $count,
                "key" => "ltime",
                "sort" => [
                    "attributes" => [
                        "ltime",
                    ],
                    "defaultOrder" => [
                        "ltime" => SORT_DESC,
                    ],
                ],
                "pagination" => [
                    "pageSize" => 15,
                ],
            ]

        );

        return $this->render("conversionrate", ["dataProvider" => $dataProvider, "type" => $query["type"]]);
    }
纯手工写表单

纯手工写html表单,我相信你会的。我就不写了。

最后,关于ActiveForm和Html的api参看Yii2官网或者中文网站。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21706.html

相关文章

  • workerman / 学习workerman之前需要知道几种php回调写法

    摘要:在中最常用的几种回调写法如下匿名函数做为回调匿名函数,也叫闭包函数,允许临时创建一个没有指定名称的函数。最经常用作回调函数参数的值。匿名函数的回调经常将其赋给一个变量或一个对象的属性最终结果会输出。 在workerman中会经常使用,我们先写一个回调函数,当某个行为被触发后使用该函数处理相关逻辑。 在PHP中最常用的几种回调写法如下 匿名函数做为回调 匿名函数(Anonymous fu...

    Java_oldboy 评论0 收藏0
  • Yii2 验证手机号、邮箱唯一性

    摘要:好比注册功能模块,手机号邮箱注册这些,肯定是要验证其的唯一性的,重复了登录就会混乱。需求分析使用框架自带的在不刷新页面的情况下验证手机号邮箱唯一性。相关资料表单验证问题注册时验证手机号唯一 序言 验证唯一性很重要,说不上用得很普及,但是也必须要有。好比注册功能模块,手机号、邮箱注册这些,肯定是要验证其的唯一性的,重复了登录就会混乱。那么如何使用Yii2自带的targetClass验证唯...

    spacewander 评论0 收藏0
  • Yii2 验证手机号、邮箱唯一性

    摘要:好比注册功能模块,手机号邮箱注册这些,肯定是要验证其的唯一性的,重复了登录就会混乱。需求分析使用框架自带的在不刷新页面的情况下验证手机号邮箱唯一性。相关资料表单验证问题注册时验证手机号唯一 序言 验证唯一性很重要,说不上用得很普及,但是也必须要有。好比注册功能模块,手机号、邮箱注册这些,肯定是要验证其的唯一性的,重复了登录就会混乱。那么如何使用Yii2自带的targetClass验证唯...

    FuisonDesign 评论0 收藏0
  • Yii2系列教程二:MVC Forms 和 Layouts

    摘要:而且很明显地,我们可以看到,一旦输入框在失去焦点的时候,如果里面没有输入任何内容,每个输入框就会有相应的错误提示,用户体验很不错。 原文来自: https://jellybool.com/post/programming-with-yii2-exploring-mvc-forms-a... 上一篇文章我们简单地实现了Yii2框架安装和Hello World,而在这一篇文章当中...

    ThreeWords 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<