yii2之ActiveForm表单使用
程序员文章站
2022-10-06 09:59:07
因目前项目并非前后端分离模式,且用到PHP的yii2框架(所有html代码,js较多内嵌在.php文件内多少采用同步提交【喷墨中...】),遂对于前端面上需要用到的yii2小组件一些整理(因是前端若涉及到php写法错误或者风格问题,敬请指点) 使用场景尽量为表单 基础注册调用小组件 1.首先就列出a ......
因目前项目并非前后端分离模式,且用到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',]); ?>
<?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();?>
以上是这段时间使用的一篇小总结 如有用法错误敬请指点
下一篇: 一个简洁的PHP可逆加密函数(分享)
推荐阅读
-
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
-
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
-
YII2.0之Activeform表单组件用法实例
-
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
-
vue指令之表单控件绑定v-model v-model与v-bind结合使用
-
yii2之ActiveForm表单使用
-
Yii2框架之ListView小部件的使用方法
-
使用YII2框架实现微信公众号中表单提交功能
-
在ASP中使用SQL语句之9:表单操作
-
YII2.0之Activeform表单组件用法实例,yii2.0activeform_PHP教程