Yii2创建表单ActiveForm方法详解.docx

上传人:b****7 文档编号:25009499 上传时间:2023-06-03 格式:DOCX 页数:8 大小:17.91KB
下载 相关 举报
Yii2创建表单ActiveForm方法详解.docx_第1页
第1页 / 共8页
Yii2创建表单ActiveForm方法详解.docx_第2页
第2页 / 共8页
Yii2创建表单ActiveForm方法详解.docx_第3页
第3页 / 共8页
Yii2创建表单ActiveForm方法详解.docx_第4页
第4页 / 共8页
Yii2创建表单ActiveForm方法详解.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Yii2创建表单ActiveForm方法详解.docx

《Yii2创建表单ActiveForm方法详解.docx》由会员分享,可在线阅读,更多相关《Yii2创建表单ActiveForm方法详解.docx(8页珍藏版)》请在冰豆网上搜索。

Yii2创建表单ActiveForm方法详解.docx

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程序设计有所关心。

...

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1