因目前项目并非前后端分离模式,且用到PHP的yii2框架(所有html代码,js较多内嵌在.php文件内多少采用同步提交【喷墨中...】),遂对于前端面上需要用到的yii2小组件一些整理(因是前端若涉及到php写法错误或者风格问题,敬请指点)

 使用场景尽量为表单

  基础注册调用小组件

  

<?php
  use yii\helpers\Html;
  use yii\widgets\ActiveForm;
?>

  //首先注册activeForm小部件,并赋值给$form(php中的声明变量方法用$ 等价于js中的var let)
  //begin 标志小部件开始
  <?php $form = ActiveForm::begin([
  'id' => 'login-form', //声明小部件的id 即form的id
     //声明需要添加的属性 ,例如class , data-x等
  'options' => ['class' => 'form-horizontal'],
  ]) ?>     //注册完小部件后可以在 activeForm小部件声明块中调用小部件的方法
   <?= $form->field($model, 'password')->passwordInput() ?>
//::end标识小部件结束
<?php ActiveForm::end() ?>

1.首先就列出activeForm的一些基本方法:

  自定义input框:input();

  文本框:textInput();

  密码框:passwordInput();

  单选框:radio(),radioList();

  复选框:checkbox(),checkboxList();

  下拉框:dropDownList();

  多选列表:listBox();

  隐藏域:hiddenInput();

  文本域:textarea(['rows'=>3]);

  文件上传:fileInput();

  widget扩展 <?= $form->field($model, 'username')->widget(\yii\widgets\MaskedInput::className(), ['mask' => '9999/99/99',]); ?>

2.下面我就逐一描述下各个方法的基本调用以及如何自定义所需(上述各方法中input之前均是描述的是input标签的类型)

  2.1 input 文本框/密码框以及各指定类型框

<?php $form=ActiveForm::begin(['id'=>'login','class'=>'login'])?>
<!-- 简易用法 使用activeForm 的 fiedld方法 -->
<!-- 其中 该方法下有
textInout/passwordInput 等一些常用input类型方法
hint 输入前的提示内容
error 错误内容 //一般由后台生成
label 可以更改label内的内容
在hint,error,label设置class后将会重置了 这些方法内原来属于容器上的class若需要可以原样赋回去
-->
<!-- 这里的
$mode为跟字段有关的数据模型 ,
第二个参数为关系模型中的字段不存在将报错,
第三个参数为模板内的一些内容的进行自定义
-->
<?= $form->field($model, 'username',[
'options'=>[],//数组里面可以设置自需属性
// template 为字符串模板可自定义模板 ,
// 其中 {label} {input} {hint} {error} 存在是会调用对应封装好的html模板 当然你也可以不写这样就不会生成yii2内置小部件模板
'template' => '{label} {input} {hint} {error}',
// 以下三个分别可以设置label ,input ,hint,error的属性(都是选填项)
// 其中如果后面有使用->input...,label(...)等将会将这些里面的配置合并值对应的xxxOptions 内
'labelOptions' => [
'class'=>'需要在label上添加的类名'
//....其他属性集
],
'inputOptions' => [],
'hintOptions' => [],
'errorOptions' => [],
])->textInput([
// 在options数组内可以设置任意属性
'class'=>'testClass',
'value'=>'测试'
])->hint(
// 设置提示内容,当只有一个参数切为false(boolean)用于显示提示的标签
'Please enter your name',
[
// 设置任意属性
'class' => 'testHint'
])->label(
// 设置label显示内容,当只有一个参数切为false(boolean)label标签将不会被渲染
'Name',
[
// 设置任意属性
'class' =>'testLabel'
])->error([
// 任意属性,当只有一个参数切为false(boolean)用于显示错误的标签
'class'=>'errors'
]) ?> <!-- 可自定义类型input 这里只描述了input的参数 其余参数参考上个示例 -->
<?= $form->field($model, 'username')->input(
// input内只允许放置两个参数即[type ,options]
'email',//该处为指定type="xxxx"的input类型
['class'=>'tests','value'=>'值']//可在内部定义任何属性
) ?> <?php ActiveForm::end();?>

   2.2 radio 单选框系列

<?php $form=ActiveForm::begin(['id'=>'login','class'=>'login'])?>

    <!--
老实说对这个radio方法相当迷惑 一个单选按钮选择而且一旦选择无法取消,无法一次柑橘属性放置多个值 在有radioList方法的前提下觉得相当鸡肋
第二个参数中false为是否开启label标签若没开启 labelOption 将无效 ,label设置的值直接显示在容器内
-->
<?= $form->field($model, 'username')->radio([
// 隐藏域中的值
'uncheck' =>'test1',
// 定义lebal的内容
'label' =>'test',
// label上的任意属性
'labelOptions'=>[
'gs'=>'test'
]
],false)?> <!--
单选框组 若要设置默认值,则在对应控制器中将指定字段设置为 需要选择的值
$model->username = 1;
--> <?= $form->field($model, 'username')->radioList([
'0'=>'a',
'1'=>'b',
'2'=>'c'
],[
// tag声改变 class="radio"的父级标签 若tag设置为h3
// 则 <div id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
// => 转为 <h3 id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
// <div class="form-group field-loginform-username required">
// <label class="control-label">Username</label>
// <input type="hidden" name="LoginForm[username]" value="">
// <div id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
// <div class="radio"><label><input type="radio" name="LoginForm[username]" value="0"> a</label></div>
// <div class="radio"><label><input type="radio" name="LoginForm[username]" value="1"> b</label></div>
// <div class="radio"><label><input type="radio" name="LoginForm[username]" value="2"> c</label></div>
// </div> // <p class="help-block help-block-error"></p>
// </div>
'tag'=>'h3',
// 未选择是默认提交的值
'unselect'=>'1',
// 如果设置了item选项,则忽略此选项
'encode'=>false,
// 每个单选块之间的内容 写的是什么字符串输出就什么字符串
'separator'=>'',
// 定义在每个input单选按钮上的属性
'itemOptions'=>[
'tess'=>'jzq'
],
      //可调用的回调,可用于自定义与$Item中单个项对应的HTML代码的生成。此回调的签名必须是:函数($index、$Label、$name、$check、$value),
      //其中$index是整个列表中单选按钮的基于零的索引;$Label是单选按钮的标签;$name、$value和$check表示单选按钮输入的名称、值和选中状态。
'item'=>function($index, $label, $name, $checked, $value){
// 这块跟encode是在下才疏学浅暂时还未明白啥子用处,待弄明白后在补上,若有码友知晓这块具体作用用法,希望不吝赐教,感激
// echo $index, $label, $name, $checked, $value;
},
// 除此yii2有规定属性之外还可自定义任意属性 且上述属性均不是必填
])?>

  2.3 checkbox多选框系列

  

<?php $form=ActiveForm::begin(['id'=>'login','class'=>'login'])?>

    <!--
checbox方法
该方法与radio 方法近似就不多说了 直接撸代码 具体可参考 radio
-->
<?= $form->field($model, 'username')->checkbox([
// 隐藏域中的值
'uncheck' =>'test1',
// 定义lebal的内容
'label' =>'test',
// label上的任意属性
'labelOptions'=>[
'gs'=>'test'
]
],true)?> <!--
checkboxList方法
多选框
-->
<?= $form->field($model, 'username')->checkboxList([
'1'=>'篮球',
'2'=>'足球',
'3'=>'游戏',
'4'=>'读书'
],[
// tag声改变 class="radio"的父级标签 若tag设置为h3
// 则 <div id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
// => 转为 <h3 id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
// <div class="form-group field-loginform-username required">
// <label class="control-label">Username</label>
// <input type="hidden" name="LoginForm[username]" value="">
// <div id="loginform-username" key="testKey" role="radiogroup" aria-required="true">
// <div class="radio"><label><input type="radio" name="LoginForm[username]" value="0"> a</label></div>
// <div class="radio"><label><input type="radio" name="LoginForm[username]" value="1"> b</label></div>
// <div class="radio"><label><input type="radio" name="LoginForm[username]" value="2"> c</label></div>
// </div> // <p class="help-block help-block-error"></p>
// </div>
'tag'=>'h3',
// 未选择是默认提交的值
'unselect'=>'1',
// 如果设置了item选项,则忽略此选项
'encode'=>false,
// 每个单选块之间的内容 写的是什么字符串输出就什么字符串,建议如无特殊情况 请忽视该字段
// 'separator'=>',',
// 定义在每个input单选按钮上的属性
'itemOptions'=>[
'tess'=>'jzq'
],
// 用于替换html指向函数后若不做操作将会输出空
// 'item'=>function($index, $label, $name, $checked, $value){
// 这块跟encode是在下才疏学浅暂时还未明白啥子用处,待弄明白后在补上,若有码友知晓这块具体作用用法,希望不吝赐教,感激
// echo $index, $label, $name, $checked, $value;
// },
// 除此yii2有规定属性之外还可自定义任意属性 且上述属性均不是必填
])?> <?php ActiveForm::end();?>

  2.4 select下拉列表系列

<?php $form=ActiveForm::begin(['id'=>'login','class'=>'login'])?>

    <!--
dropDownList方法
下拉列表
-->
<?= $form->field($model, 'username')->dropDownList([
// 二维数组直接回报上组标签
'test'=>[
'1'=>'篮球',
'2'=>'足球',
],
'3'=>'游戏',
'4'=>'读书'
],[
// 设置下拉列表的默认请选择选项
'prompt'=>[
'text' => '请选择',
'options' => ['value' => 'none', 'class' => 'prompt', 'label' => 'Select']
],
'encode'=>false,
// 对select option的设置条件以及更改内容
'options'=>[
// 设置禁止选择项
'2' => ['disabled' => true],
//替换或者追加指定key的内容,实际上原内容还在只是假设了 label 属性 和显示了 label的属性值
            '4' => ['label' => 'value 2'],
],
'encodeSpaces'=>true
// 除此yii2有规定属性之外还可自定义任意属性 且上述属性均不是必填
])?> <?php ActiveForm::end();?>

   2.5 widget 小部件

<?php $form=ActiveForm::begin(['id'=>'login','class'=>'login'])?>

    <!--
小部件
用于强制输入正确内容的input部件
-->
<?= $form->field($model, 'username',[
'template'=>'<h2>test</h2> {label} {input} {error}'
])->widget(\yii\widgets\MaskedInput::className(), [
// 指定input类型
// 'type'=>'time',
// 指定必须输入的类型
'mask' => '999-9999-9999',
'options'=>['class' => 'form-control test']
]); ?> <!--
用于生成带图片验证的input小部件
-->
<?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
'captchaAction' => 'login/captcha',
'options' => [
'class' => 'two',
'id'=>'two',
'placeholder' => '请输入验证码',
],
'template' => '{input}{image}',
'imageOptions' => [
'alt' => 'images',
]
])?>
  --------------------- 最后一个并未实测   -------------------------------
<!-- 自定义小部件 需在widget文件定义源文件 --> <?= $form->field($model, 'username')->widget('WidgetClassName', [ // configure additional widget properties here ]) ?> <?php ActiveForm::end();?>

以上是这段时间使用的一篇小总结 如有用法错误敬请指点

yii2之ActiveForm表单使用的更多相关文章

  1. yii2 创建ActiveForm(表单)

    表单的生成表单中的方法    ActiveForm::begin()方法    ActiveForm::end()方法    getClientOptions()方法    其它方法:errorSum ...

  2. yii2.0 Activeform表单部分组件使用方法

    文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...

  3. yii2.0 Activeform表单部分组件使用方法 [ 2.0 版本 ]

    文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...

  4. yii2接收activeform表单信息

    第一种方法: $model->load(Yii::$app->request->post()); 第二种方法: 获取具体的某一项的值 $demo = $_POST['模型名']['字 ...

  5. yii中调整ActiveForm表单样式

    Yii2中对于表单和字段的支持组件为ActiveForm和ActiveField, <?php $form = ActiveForm::begin([ 'id' => 'login-for ...

  6. YII2.0使用ActiveForm表单(转)

    Controller控制器层代码 <?php namespace frontend\controllers; use frontend\models\UserForm; class UserCo ...

  7. Yii2 如何实现表单事件之 Ajax 提交

    前言 Yii2 现在使用 JS 都必须要注册代码了. 要实现 Ajax 提交,有两种方法.一是直接在 ActiveForm 调用 beforeSubmit 参数,但是个人认为这样没有很好的把 JS 和 ...

  8. Yii2中自定义表单样式

    use yii\widgets\ActiveForm; <?php $form = ActiveForm::begin([ 'options' => ['class' => 'for ...

  9. yii2自动生成表单

    视图中: 1.要use的两个文件类 use yii\helpers\Html;   use yii\widgets\ActiveForm; 2.生成表单,以添加商品为例说明.注意红线区域:上传文件需要 ...

随机推荐

  1. 修改BUG心得

      修改BUG心得 分类: 项目管理/CMMI2013-01-14 22:06 845人阅读 评论(0) 收藏 举报 目录(?)[-] 一 二 三 一. 1.写第一版时就杜绝这些的发生. 2.思维要开 ...

  2. 开始Java之旅

      从今天起,cgg将给大家讲讲Java这种神奇的东西.   至于配置环境变量,大家可以看看我的博客:环境变量上面有详细解释.   下面先给大家一个公式:    public class [文件名]{ ...

  3. 2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)

    传送门 听说是最长反链衍生出的对偶定理就能秒了. 本蒟蒻直接用线段树模拟维护的. 对于第一维排序. 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解. 代码

  4. 2018.10.15 NOIP训练 水流成河(换根dp)

    传送门 换根dp入门题. 貌似李煜东的书上讲过? 不记得了. 先推出以1为根时的答案. 然后考虑向儿子转移. 我们记f[p]f[p]f[p]表示原树中以ppp为根的子树的答案. g[p]g[p]g[p ...

  5. 2018.07.27 bzoj4695: 最假女选手(线段树)

    传送门 线段树好题 支持区间加,区间取min" role="presentation" style="position: relative;"> ...

  6. hdu-1173(最短距离)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1173 思路:最短距离:就是现将x,y从小到大排序,然后去中间点就行了.(注意:本题答案不唯一) #in ...

  7. python 实现排列组合

    1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__ ...

  8. 常见的it软件默认端口

    tomcat:8080 nginx:80 mysql:3306 oracle:1521 nexus:8081 浏览器:80 redis:6379 solr:tomcat部署默认8080 jetty部署 ...

  9. 获取手机的唯一标示uuid

    NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

  10. (KMP扩展 利用循环节来计算) Cyclic Nacklace -- hdu -- 3746

    http://acm.hdu.edu.cn/showproblem.php?pid=3746 Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others ...