Yii2 表单(form)

表单

1、表单的创建

  • 在 yii 中主要通过 yii\widgets\ActiveForm 类来创建表单
  • ActiveForm::begin() 不仅创建了一个表单实例,同时也标志着表单的开始
  • 放在 ActiveForm::begin() 和 ActiveForm::end()之间的所有内容都被包裹在 html 的 from 标签中
  • 中间是通过调用 ActiveForm::field() 方法来创建一个 ActiveForm 实例,这个实例会创建表单元素与元素的标签以及对应的 js 验证
  • ActiveField 有一个对应的模型和属性, input 输入框的 name 属性会自动的根据属性名来创建,同时,还会用属性的验证规则来验证用户输入的数据

e.g.

   <?= $form->field($model,'name')->textInput(['autofocus' => true]) ?>
解析后的标签为:

  <input type="text" id="contactform-name" class="form-control" name="ContactForm[name]" autofocus />
还会自动添加 js 验证,代码如下:

jQuery('#contactform-name').yiiActiveForm([{

  "id" : "contactform-name",

  "name" : "name",

  "container" : ".field-contactform-name",

  "input" : "#contactform-name",

  "error" : ".help-block.help-block-error",

  "validate" : function(attribute,value,messages,deferred,$form){

  yii.validation.required(value,messages,{

    "messages" : "Name 不能为空",

  });
}])

 

2、ActiveField 对象的使用(参考类参考手册 yii\widgets\ActiveField 中的 methods)

  • <?= $form->field($model,'password') -> passwordInput() ?>   <!--密码输入框-->
  • <?= $form->field($model,'username') -> textInput() -> hint('Please enter your name')->label('Name') ?>   <!--输入框增加了一个提示标签-->
  • <?= $form->field($model,'email') -> input('email') ?>   <!--创建一个 html5 的邮箱输入框-->
  • <?= $form -> field($model,'name')->label('姓名') ?>   <!-- 自定义输入框的显示标签名 -->

3、额外标签的处理,即与模型对象没有关系的额外 HTML 标签(e.g. submit,button, p 等 )

使用 yii\helpers\Html 帮助类中的方法来添加到表单中

e.g. 纯文本

  <?= '<p class="username">'.$user->name.'</p>' ?>

Html 帮助类

  <?= Html::tag('p',Html::encode($user->name),['class'=>'username']) ?>

4、块儿赋值

  •  input 中的 name ,实际是以对象名来命名的一个数组,数组的键对应模型的属性 (e.g. name="ContactForm[name]")
  •  model 执行 load() 方法,就是对每个属性执行这样一句赋值:$model -> name = isset($ContactForm['name']) ? $ContactForm[name] : null;
  • 块赋值就是用这一句代码将用户所有的输入数据填充到模型中去

5、dropDownList 的用法:

<?= $form->field($model, 'status')->dropDownList($allStatus,['options' => [$needSelected => ['selected' => 'selected']],['prompt'=>'请选择状态']) ?>

$allStatus 是一个 [1=>'已发布'] 形式的关联数组

$needSelected 为需要默认选中的值,其值满足 $allStatus 中 key 值中的一个

 注:本文为作者(44106-kangaroo) 看完魏羲教你学Yii2.0 视频后所记,如有转载请注明出处:http://www.cnblogs.com/chrdai/p/8005492.html

 

Yii2中各种文本框的使用 

文本框:textInput();
密码框:passwordInput();
单选框:radio(),radioList();
复选框:checkbox(),checkboxList();
下拉框:dropDownList();
隐藏域:hiddenInput();
文本域:textarea(['rows'=>3]);
文件上传:fileInput();
提交按钮:submitButton();
重置按钮:resetButtun();

<?php
$form = ActiveForm::begin(['action' => ['test/getpost'],'method'=>'post',]); ?>
 
<? echo $form->field($model, 'username')->textInput(['maxlength' => 20]) ?>

<? echo $form->field($model, 'password')->passwordInput(['maxlength' => 20]) ?>

<? echo $form->field($model, 'sex')->radioList(['1'=>'男','0'=>'女']) ?>

<? echo $form->field($model, 'edu')->dropDownList(['1'=>'大学','2'=>'高中','3'=>'初中'], ['prompt'=>'请选择','style'=>'width:120px']) ?>

<? echo $form->field($model, 'file')->fileInput() ?>

<? echo $form->field($model, 'hobby')->checkboxList(['0'=>'篮球','1'=>'足球','2'=>'羽毛球','3'=>'乒乓球']) ?>

<? echo $form->field($model, 'info')->textarea(['rows'=>3]) ?>

<? echo $form->field($model, 'userid')->hiddenInput(['value'=>3]) ?>

<? echo Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>
   
<? echo Html::resetButton('重置', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>

<?php ActiveForm::end(); ?>


yii2

 

posted @ 2017-12-08 15:14  Chrdai  阅读(9242)  评论(0编辑  收藏  举报