Yii2创建表单ActiveForm方法详解.docx
《Yii2创建表单ActiveForm方法详解.docx》由会员分享,可在线阅读,更多相关《Yii2创建表单ActiveForm方法详解.docx(8页珍藏版)》请在冰豆网上搜索。
Yii2创建表单ActiveForm方法详解
Yii2创建表单(ActiveForm)方法详解_
本文实例讲解并描述了Yii2创建表单(ActiveForm)的方法。
分享给大家供大家参考,具体如下:
由于表单涉及到一些验证方面的信息,属性设置又比较多、比较简单,所以哪里有什么不正确的地方请留言教导
名目
表单的生成
表单中的方法
ActiveForm:
:
begin()方法
ActiveForm:
:
end()方法
getClientOptions()方法
其它方法:
errorSummary、validate、validateMultiple
表单中的参数
表单form自身的属性
表单中各个项(field)输入框相关的属性
$fieldConfig
关于验证的属性
关于每个field容器样式的属性
ajax验证
前端js大事
表单中的其它属性
我们先看看Yii里面最简洁的登录表单以及生成的html代码和界面,先有个直观的了解
?
php$form=ActiveForm:
:
begin(['id'='login-form']);?
?
=$form-field($model,'username')?
?
=$form-field($model,'password')-passwordInput()?
?
=$form-field($model,'rememberMe')-checkbox()?
divstyle="color:
#999;margin:
1em0"
Ifyouforgotyourpasswordyoucan?
=Html:
:
a('resetit',['site/request-password-reset'])?
/div
divclass="form-group"
?
=Html:
:
submitButton('Login',['class'='btnbtn-primary','name'='login-button'])?
/div
?
phpActiveForm:
:
end();?
下面是生成的表单Html,我在里面标明白5部分。
1、表单的生成
在Yii中表单即ActiveForm也是Widget,在上面可以看到是由begin开头
?
php$form=ActiveForm:
:
begin(['id'='login-form']);?
中间为各个项的输入框,最终由end结尾
?
phpActiveForm:
:
end();?
2、表单中的方法
在Widget中begin()方法会调用int方法
publicfunctioninit()
在最终的end()方法会调用run方法
publicfunctionrun()
1、ActiveForm:
:
begin()方法
//这个是在执行$form=ActiveForm:
:
begin(['id'='login-form']);中的begin方法的时候调用的
publicfunctioninit()
{
//设置表单元素form的id
if(!
isset($this-options['id'])){
$this-options['id']=$this-getId();
}
//设置表单中间的要生成各个field的所用法的类
if(!
isset($this-fieldConfig['class'])){
$this-fieldConfig['class']=ActiveField:
:
className();
}
//这个就是输出表单的开头标签
//如:
formid="login-form"action="/lulublog/frontend/web/index.php?
r=site/login"method="post"
echoHtml:
:
beginForm($this-action,$this-method,$this-options);
}
2、ActiveForm:
:
end()方法
//这个是在执行ActiveForm:
:
end();中的end方法的时候调用的
publicfunctionrun()
{
//下面这个就是往视图中注册表单的js验证脚本,
if(!
empty($this-attributes)){
$id=$this-options['id'];
$options=Json:
:
encode($this-getClientOptions());
$attributes=Json:
:
encode($this-attributes);
$view=$this-getView();
ActiveFormAsset:
:
register($view);
/*
*$attributes:
为要验证的全部的field数组。
它的值是在activeform中创建field的时候,在field的begin方法中给它赋值的。
*其中每个field又是一个数组,为这个field的各个参数
*比如username的field中的参数有
*validate、id、name、
*validateOnChange、validateOnType、validationDelay、
*container、input、error
*
*$options:
为这个表单整体的属性,如:
*errorSummary、validateOnSubmit、
*errorCssClass、successCssClass、validatingCssClass、
*ajaxParam、ajaxDataType
*/
$view-registerJs("jQuery('#$id').yiiActiveForm($attributes,$options);");
}
//输出表单的结束标签
echoHtml:
:
endForm();
}
3、getClientOptions()方法
/*
*设置表单的全局的一些样式属性以及js回调大事等
*/
protectedfunctiongetClientOptions()
{
$options=[
'errorSummary'='.'.$this-errorSummaryCssClass,
'validateOnSubmit'=$this-validateOnSubmit,
'errorCssClass'=$this-errorCssClass,
'successCssClass'=$this-successCssClass,
'validatingCssClass'=$this-validatingCssClass,
'ajaxParam'=$this-ajaxParam,
'ajaxDataType'=$this-ajaxDataType,
];
if($this-validationUrl!
==null){
$options['validationUrl']=Url:
:
to($this-validationUrl);
}
foreach(['beforeSubmit','beforeValidate','afterValidate']as$name){
if(($value=$this-$name)!
==null){
$options[$name]=$valueinstanceofJsExpression?
$value:
newJsExpression($value);
}
}
return$options;
}
下面这个是生成的表单验证Js代码
jQuery(document).ready(function(){
jQuery('#login-form').yiiActiveForm(
{
"username":
{
"validate":
function(attribute,value,messages){
yii.validation.required(value,messages,{"message":
"Usernamecannotbeblank."});
},
"id":
"loginform-username",
"name":
"username",
"validateOnChange":
true,
"validateOnType":
false,
"validationDelay":
200,
"container":
".field-loginform-username",
"input":
"#loginform-username",
"error":
".help-block"},
"password":
{
"validate":
function(attribute,value,messages){
yii.validation.required(value,messages,{"message":
"Passwordcannotbeblank."});
},
"id":
"loginform-password",
"name":
"password",
"validateOnChange":
true,
"validateOnType":
false,
"validationDelay":
200,
"container":
".field-loginform-password",
"input":
"#loginform-password",
"error":
".help-block"
},
"rememberMe":
{
"validate":
function(attribute,value,messages){
yii.validation.boolean(value,messages,{
"trueValue":
"1","falseValue":
"0","message":
"RememberMemustbeeither\"1\"or\"0\".","skipOnEmpty":
1});
},
"id":
"loginform-rememberme",
"name":
"rememberMe","validateOnChange":
true,
"validateOnType":
false,
"validationDelay":
200,
"container":
".field-loginform-rememberme",
"input":
"#loginform-rememberme",
"error":
".help-block"}
},
{
"errorSummary":
".error-summary",
"validateOnSubmit":
true,
"errorCssClass":
"has-error",
"successCssClass":
"has-success",
"validatingCssClass":
"validating",
"ajaxParam":
"ajax",
"ajaxDataType":
"json"
});
});
4、其它方法:
errorSummary、validate、validateMultiple
publicfunctionerrorSummary($models,$options=[])
它主要就是把model中的全部的错误信息汇总到一个div中。
publicstaticfunctionvalidate($model,$attributes=null)
publicstaticfunctionvalidateMultiple($models,$attributes=null)
这两个是猎取错误信息的方法,比较简洁也不说了。
3、表单中的参数
1、表单form自身的属性
$action:
设置当前表单提交的url地址,假如为空则是当前的url
$method:
提交方法,post或者get,默认为post
$option:
这个里面设置表单的其它的属性,如id等,假如没有设置id,将会自动生成一个以$autoIdPrefix为前缀的自动增加的id
//这个方法在Widget基本中
publicfunctiongetId($autoGenerate=true)
{
if($autoGenerate$this-_id===null){
$this-_id=self:
:
$autoIdPrefix.self:
:
$counter++;
}
return$this-_id;
}
2、表单中各个项(field)输入框相关的属性
Yii生成的每个field由4部分组成:
①最外层div为每个field的容器,
②label为每个field的文本说明,
③input为输入元素,
④还有一个div为错误提示信息。
divclass="form-groupfield-loginform-usernamerequiredhas-error"
labelclass="control-label"for="loginform-username"Username/label
inputtype="text"id="loginform-username"class="form-control"name="LoginForm[username]"
divclass="help-block"Usernamecannotbeblank./div
/div
$fieldConfig:
这个是全部的field的统一的配置信息设置的属性。
也就是说在field类中的属性都可以在这里进行设置。
publicfunctionfield($model,$attribute,$options=[])
{
//用法fieldConfig和options属性来创建field
//$options会掩盖统一的fieldConfig属性值,以实现每个field的自定义
returnYii:
:
createObject(array_merge($this-fieldConfig,$options,[
'model'=$model,
'attribute'=$attribute,
'form'=$this,
]));
}
关于验证的属性:
①$enableClientValidation:
是否在客户端验证,也即是否生成前端js验证脚本(假如在form中设置了ajax验证,也会生成这个js脚本)。
②$enableAjaxValidation:
是否是ajax验证
③$validateOnChange:
在输入框失去焦点并且值转变的时候验证
④$validateOnType:
正在输入的时候就进行验证
⑤$validationDelay:
验证延迟的时间,单位为毫秒
这5个属性都可以在创建每个field的时候单独设置,由于在field类中就有这5个属性。
关于每个field容器样式的属性:
$requiredCssClass:
必填项的样式,默认为‘required'
$errorCssClass:
验证错误的样式,默认值为‘has-error'
$successCssClass:
验证正确的样式,默认值为‘has-success'
$validatingCssClass:
验证过程中的样式,默认值为‘validating'
3、ajax验证
$validationUrl:
ajax验证的url地方
$ajaxParam:
url中的get参数,用来标明当前是ajax恳求,默认值为‘ajax'
$ajaxDataType:
ajax恳求返回的数据格式
4、前端js大事属性
$beforeSubmit:
在提交表单之前大事,假如返回false,则不会提交表单,格式为:
function($form){
...returnfalsetocancelsubmission...
}
$beforeValidate:
在每个属性在验证之前触发,格式为:
function($form,attribute,messages){
...returnfalsetocancelthevalidation...
}
$afterValidate:
在每个属性在验证之后触发,格式为:
function($form,attribute,messages){
}
5、表单中的其它属性
$validateOnSubmit:
提交表单的时候进行验证
$errorSummary:
总的错误提示地方的样式
$attributes:
这个属性比较特别,它是在创建field的时候,在field中为这个form中的$attributes赋值的。
这样可以确保通过field方法生成的输入表单都可以进行验证
盼望本文所述对大家基于Yii框架的PHP程序设计有所关心。
...