CActiveForm

优质
小牛编辑
135浏览
2023-12-01
所有包 | 属性 | 方法
system.web.widgets
继承class CActiveForm » CWidget » CBaseController » CComponent
子类CCodeForm
源自1.1.1
版本$Id: CActiveForm.php 3542 2012-01-17 12:46:49Z mdomba $
源码framework/web/widgets/CActiveForm.php
CActiveForm提供了一系列方法,这些方法可以帮助简化表单创建的复杂性, 也可以帮助创建基于模型数据的可交互HTML表单。

CActiveForm调用“beginWidget”和“endWidget”渲染 表单的开始标签和结束标签。CActiveForm的其他绝大部分方法 使用CHtml中相应的“active”方法包装。在“beginWidget” 和“endWidget”之间调用这些方法,可以渲染出文字标签、输入框, 等等。例如,调用CActiveForm::textField 将为指定的模型属性生成一个输入框。

CactiveForm的一个极为有用的特性是它支持数据验证。 CActiveForm支持三个层次的数据验证:
  • 服务器端验证:当整个表单页面被提交后,在服务器端 进行验证。如果存在任何验证错误,CActiveForm将把错误 信息显示在用户页面上。
  • 基于AJAX的验证:当用户在输入框中输入了数据, 需要在服务器端进行验证的输入框将触发一个AJAX验证。 验证结果通过AJAX response返回,输入框也根据返回结果 相应的改变它的显示行为。
  • 客户端验证(从1.1.7版后可用): 当用户在输入框中输入数据, 验证动作将在客户端通过JavaScript执行。由于没有产生与 服务器端的通讯,这种方式可以降低服务器的负荷。


所有这些验证共享一个验证规则的集合,这个集合被 定义在相应的模型类中。CActiveForm的设计方针是 使所有的验证都产生一致的用户界面变化和错误提示 内容。

为了确保数据有效性,服务器端验证将始终被执行。 通过设置enableAjaxValidation为true,可以使基于AJAX的验证可用; 通过设置enableClientValidation为true, 可以使客户端验证可用。 注意:为了使得后两种验证正常工作,用户的浏览器需要 设置JavaScript可用。否则,将只有服务商的验证将会被 执行。

基于AJAX的验证和客户端验证可以同时使用,也可以分开 使用。例如,在用户注册表单中,可以使用基于AJAX的验 证来检查用户是否选择了未重复的用户名,使用客户端验 证来确保所有需要有内容的字段都被输入了内容。 因为基于AJAX的验证可能增加服务器的额外负荷,在可能 的情况下我们应当尽可能地使用客户端验证。

基于AJAX的验证有一些限制:首先,它不能用于 文件上传字段;其次,它不能用于可能产生服务 器端状态改变的验证;第三,它目前还不能用于 表格式输入的验证。

不同的验证器对客户端验证的支持是不一定的。一个验证器 仅在下列情形下支持客户端验证:首先,它实现了CValidator::clientValidateAttribute 其次,它的CValidator::enableClientValidation属性设置为true。 目前,下列核心验证器支持客户端验证:
  • CBooleanValidator
  • CCaptchaValidator
  • CCompareValidator
  • CEmailValidator
  • CNumberValidator
  • CRangeValidator
  • CRegularExpressionValidator
  • CRequiredValidator
  • CStringValidator
  • CUrlValidator


CActiveForm依赖于CSS来定制输入框在不同的 验证状态下的外观。详细来说,每个输入框可能 处于以下四种状态之一:initial(尚未验证), validating,error和success。为了区分这些 状态,CActiveForm为后三种状态自动设定不同 的CSS类,应用到包含输入框的HTML元素。 默认情况下,这些CSS类将分别被命名为“validating”, “error”和“success”。我们可以通过配置clientOptions 属性或在error方法中明确指定来定制这些CSS类。

下面的代码片段是视图文件的示例代码,说明如何使用CActiveForm:

<?php $form = $this->beginWidget('CActiveForm', array(  'id'=>'user-form',  'enableAjaxValidation'=>true,  'enableClientValidation'=>true,  'focus'=>array($model,'firstName'),
)); ?>
<?php echo $form->errorSummary($model); ?>
<div>


为了响应AJAX验证请求,我们需要下列类代码:
public function actionCreate()
{  $model=new User;  $this->performAjaxValidation($model);  if(isset($_POST['User']))  {      $model->attributes=$_POST['User'];      if($model->save())          $this->redirect('index');  }  $this->render('create',array('model'=>$model));
}
protected function performAjaxValidation($model)
{  if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')  {      echo CActiveForm::validate($model);      Yii::app()->end();  }
}


在上面的代码中,如果我们不想设置基于AJAX的验证可用,我们可以 移除performAjaxValidation方法和对它的调用。

公共属性

隐藏继承属性

属性类型描述定义在
actionmixed表单动作的URL (参见CHtml::normalizeUrl以了解更多关于此参数的细节)。 如果未设置,将使用当前页面的URL。CActiveForm
actionPrefixstringactions的ID的前缀。 当微件在CController::actions中声明了 动作提供者,可以为其动作的ID指定前缀以区别 于别的微件或控制器。当微件用于控制器 的视图中时,必须配置同样的前缀。CWidget
clientOptionsarray传递给JavaScript验证插件的选项数组。 目前支持下列选项:
  • ajaxVar: string, 用来指明当前请求是一个AJAX请求的参数的名字。 当AJAX验证被触发,一个以此属性值为名的参数将与其他表单数据一起被提 交到服务器。此参数的值是表单的ID。 服务器端可以检测出AJAX验证的触发者,并作出相应的反应。 默认值是“ajax”。
  • validationUrl: string, 用于执行AJAX验证的URL。 如果没有设置,将使用action的值。
  • validationDelay: integer, 输入被改变后延迟多少时间才执行 AJAX验证,单位是毫秒。设置为0意味着输入被改变后将立即执行AJAX 验证。设置为大于0的值意味着多个输入改变可能只触发一次AJAX验证, 只要它们发生得足够快。这种方式可以帮助降低服务器负荷。 默认值是200(0.
CActiveForm
controllerCController返回此微件所属的控制器。CWidget
enableAjaxValidationboolean是否使基于AJAX的验证可用。默认值是false。 当此属性设置为true,你应当象下面这样在服务器端对AJAX验证请求作出响应:
public function actionCreate()
{  $model=new User;  if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')  {      echo CActiveForm::validate($model);      Yii::app()->end();  }  .
CActiveForm
enableClientValidationboolean是否使客户端验证可用。默认值是false。

当此属性设置为true,支持它的验证器将执行客户端验证。 (参见CValidator::enableClientValidation和CValidator::clientValidateAttribute。)
CActiveForm
errorMessageCssClassstring错误信息的CSS类。默认值是“errorMessage”。 个体的error调用可以通过指定“class”HTML选项来覆盖这个值。CActiveForm
focusmixed页面载入时初始化获取输入焦点的表单元素。

默认值是null,表示没有输入域拥有焦点。 如果设置为数组,第一个元素是模型,第二个元素是属性。 如果设置为字符串,那么将作为jQuery的选择器使用。

示例 - 设置页面载入时的输入焦点:
  • 'focus'=>array($model,'username') - $model->username 输入框
  • 'focus'=>'#'.
CActiveForm
htmlOptionsarrayadditional 渲染表单标签的HTML属性。CActiveForm
idstring返回此微件的ID。如果需要的话,将生产一个新的ID并将其返回。CWidget
methodstring表单提交的方式。可以是“post”或“get”。 默认值是“post”。CActiveForm
ownerCBaseController返回此微件的所有者或创建者。CWidget
skinmixed微件使用的皮肤的名称。默认为“default”。 如果此属性设置为false,微件将不会有皮肤被使用。CWidget
statefulboolean是否生成有状态的表单(参见CHtml::statefulForm)。默认值是false。CActiveForm
viewPathstring返回包含此微件所需的视图文件的路径。CWidget

受保护属性

隐藏继承属性

属性类型描述定义在
attributesarray用于模型属性的javascript选项 (input ID => options)CActiveForm
summaryIDstring包含汇总的错误信息的元素的IDCActiveForm

公共方法

隐藏继承方法

方法描述定义在
__call()如果类中没有调的方法名,则调用这个方法。CComponent
__construct()构造器。CWidget
__get()返回一个属性值、一个事件处理程序列表或一个行为名称。CComponent
__isset()检查一个属性是否为null。CComponent
__set()设置一个组件的属性值。CComponent
__unset()设置一个组件的属性为null。CComponent
actions()返回此widget使用的动作的列表。CWidget
asa()返回这个名字的行为对象。CComponent
attachBehavior()附加一个行为到组件。CComponent
attachBehaviors()附加一个行为列表到组件。CComponent
attachEventHandler()为事件附加一个事件处理程序。CComponent
beginCache()Begins fragment caching.CBaseController
beginClip()Begins recording a clip.CBaseController
beginContent()Begins the rendering of content that is to be decorated by the specified view.CBaseController
beginWidget()Creates a widget and executes it.CBaseController
canGetProperty()确定属性是否可读。CComponent
canSetProperty()确定属性是否可写。CComponent
checkBox()为一个模型属性渲染一个复选框。CActiveForm
checkBoxList()为一个模型属性渲染一个复选框组。CActiveForm
createWidget()Creates a widget and initializes it.CBaseController
detachBehavior()从组件中分离一个行为。CComponent
detachBehaviors()从组件中分离所有行为。CComponent
detachEventHandler()分离一个存在的事件处理程序。CComponent
disableBehavior()禁用一个附加行为。CComponent
disableBehaviors()禁用组件附加的所有行为。CComponent
dropDownList()为一个模型属性渲染一个下拉列表框。CActiveForm
enableBehavior()启用一个附加行为。CComponent
enableBehaviors()启用组件附加的所有行为。CComponent
endCache()Ends fragment caching.CBaseController
endClip()Ends recording a clip.CBaseController
endContent()Ends the rendering of content.CBaseController
endWidget()Ends the execution of the named widget.CBaseController
error()显示一个模型属性的第一个验证错误。CActiveForm
errorSummary()显示一个或多个模型的汇总的验证错误信息。CActiveForm
evaluateExpression()计算一个PHP表达式,或根据组件上下文执行回调。CComponent
fileField()为一个模型属性渲染一个文件上传控件。CActiveForm
getController()返回此微件所属的控制器。CWidget
getEventHandlers()返回一个事件的附加处理程序列表。CComponent
getId()返回此微件的ID。如果需要的话,将生产一个新的ID并将其返回。CWidget
getOwner()返回此微件的所有者或创建者。CWidget
getViewFile()根据视图名查找视图文件。CWidget
getViewPath()返回包含此微件所需的视图文件的路径。CWidget
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
hiddenField()为一个模型属性渲染一个隐藏域。CActiveForm
init()初始化widget。CActiveForm
label()为一个模型属性渲染出一个HTML Label标签。CActiveForm
labelEx()为一个模型属性渲染出一个HTML Label标签。CActiveForm
listBox()为一个模型属性渲染一个列表框。CActiveForm
passwordField()为一个模型属性渲染一个密码框。CActiveForm
radioButton()为一个模型属性渲染一个单选按钮。CActiveForm
radioButtonList()为一个模型属性渲染一个单选按钮组。CActiveForm
raiseEvent()发起一个事件。CComponent
render()渲染一个视图。CWidget
renderFile()Renders a view file.CBaseController
renderInternal()Renders a view file.CBaseController
run()运行widget。CActiveForm
setId()设置此微件的ID。CWidget
textArea()为一个模型属性渲染一个多行的文本输入控件。CActiveForm
textField()为一个模型属性渲染一个输入框。CActiveForm
validate()验证一个或多个模型,以JSON格式返回结果。CActiveForm
validateTabular()验证一个由多个模型实例组成的数组,并将验证结果以JSON格式返回。CActiveForm
widget()Creates a widget and executes it.CBaseController

属性详细

action 属性 public mixed $action;

表单动作的URL (参见CHtml::normalizeUrl以了解更多关于此参数的细节)。 如果未设置,将使用当前页面的URL。

attributes 属性 (可用自 v1.1.7) protected array $attributes;

用于模型属性的javascript选项 (input ID => options)

参见

  • error
clientOptions 属性 public array $clientOptions;

传递给JavaScript验证插件的选项数组。 目前支持下列选项:

  • ajaxVar: string, 用来指明当前请求是一个AJAX请求的参数的名字。 当AJAX验证被触发,一个以此属性值为名的参数将与其他表单数据一起被提 交到服务器。此参数的值是表单的ID。 服务器端可以检测出AJAX验证的触发者,并作出相应的反应。 默认值是“ajax”。
  • validationUrl: string, 用于执行AJAX验证的URL。 如果没有设置,将使用action的值。
  • validationDelay: integer, 输入被改变后延迟多少时间才执行 AJAX验证,单位是毫秒。设置为0意味着输入被改变后将立即执行AJAX 验证。设置为大于0的值意味着多个输入改变可能只触发一次AJAX验证, 只要它们发生得足够快。这种方式可以帮助降低服务器负荷。 默认值是200(0.2秒)。
  • validateOnSubmit: boolean, 当表单被提交时是否执行AJAX验证。 如果存在任何验证错误,表单的提交动作将被停止。 默认值是false。
  • validateOnChange: boolean, 是否每次输入值被改变都触发 一次AJAX验证。因为每次AJAX验证请求都会提交整个表单的数据, 可能会导致过多的影响性能,你可以选择关闭此选项。 默认值是true。
  • validateOnType: boolean, 是否用户的每次按键动作都会触 发一次AJAX验证。如果该属性设置为true,你应该增大“validationDelay” 的值以避免触发太多的AJAX验证。默认值是false。
  • hideErrorMessage: boolean, 当存在错误时是否隐藏错误提示信息。 默认值是false,表示无论是否存在输入错误,都会显示错误信息。
  • inputContainer: string, 包含输入框的HTML元素的jQuery选择器。 在验证处理过程中,CActiveForm将为包含元素指定相应的CSS类以指示状 的改变。如果没有设置,默认是指包含输入框的最近的“div”元素。
  • errorCssClass: string, 为包含有AJAX验证错误的输入框的HTML容器 指定的CSS类。默认值是“error”。
  • successCssClass: string, 为包含通过了AJAX验证成功的输入框的HTML 容器指定的CSS类。默认值是“success”。
  • validatingCssClass: string, 为包含正在进行AJAX验证的输入框的 HTML容器指定的CSS类。默认值是“validating”。
  • errorMessageCssClass: string, 为AJAX验证返回的错误提示信息 指定的CSS类。默认值是“errorMessage”。
  • beforeValidate: function, 在一个表单提交动作触发的基于AJAX的 验证执行之前被调用的函数(仅当validateOnSubmit设置为true时可用)。 预期的函数签名形如beforeValidate(form) {...},这儿“form” 是form对象的jQuery表示。如果此函数的返回值不为true,验证将会被取 消。

    注意:因为此选项指向一个JavaScript函数,你应该为它增加一个“js:”前缀, 以避免它被作为一个字符串编码。此选项从1.1.3版开始被支持。
  • afterValidate: function, 在一个表单提交动作触发的基于AJAX的 验证执行之后被调用的函数(仅当validateOnSubmit设置为true时可用)。 预期的函数签名形如afterValidate(form, data, hasError) {...}, 这儿“form”是form对象的jQuery表示;“data”是服务器端验证响应的JSON格式的数据; “hasError”是一个布尔值,它指示是否存在任何验证错误。如果此函数的返回值不是true, 相应的表单提交将会被取消。

    注意:因为此选项指向一个JavaScript函数,你应该为它增加一个“js:”前缀, 以避免它被作为一个字符串编码。此选项从1.1.3版开始被支持。
  • beforeValidateAttribute: function, 当一个单独的属性的输入框 发生改变时触发的AJAX验证执行之前被调用的函数。预期的函数签名形如 beforeValidateAttribute(form, attribute) {...}, 这儿“form”是form对象的jQuery表示;“attribute”指向触发的属性的js选项(参见error)。 如果此函数的返回值不为true,验证将会被取消。

    注意:因为此选项指向一个JavaScript函数,你应该为它增加一个“js:”前缀, 以避免它被作为一个字符串编码。此选项从1.1.3版开始被支持。
  • afterValidateAttribute: function, 当一个单独的属性的输入框 发生改变时触发的AJAX验证执行之后被调用的函数。预期的函数签名形如 afterValidateAttribute(form, attribute, data, hasError) {...}, 这儿“form”是form对象的jQuery表示; “attribute”指向触发的属性的js选项 (参见error); “data”是服务器端验证响应的JSON格式的数据;“hasError”是一个布尔值, 它指示是否存在任何验证错误。

    注意:因为此选项指向一个JavaScript函数,你应该为它增加一个“js:”前缀, 以避免它被作为一个字符串编码。此选项从1.1.3版开始被支持。


上述的部分选项可能被个体的error()调用覆盖。 这部分选项包括:validationDelay,validateOnChange,validateOnType,hideErrorMessage, inputContainer,errorCssClass,successCssClass,validatingCssClass,beforeValidateAttribute,afterValidateAttribute。

enableAjaxValidation 属性 public boolean $enableAjaxValidation;

是否使基于AJAX的验证可用。默认值是false。 当此属性设置为true,你应当象下面这样在服务器端对AJAX验证请求作出响应:

public function actionCreate()
{  $model=new User;  if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')  {      echo CActiveForm::validate($model);      Yii::app()->end();  }  ......
}

enableClientValidation 属性 (可用自 v1.1.7) public boolean $enableClientValidation;

是否使客户端验证可用。默认值是false。

当此属性设置为true,支持它的验证器将执行客户端验证。 (参见CValidator::enableClientValidation和CValidator::clientValidateAttribute。)

参见

  • error
errorMessageCssClass 属性 public string $errorMessageCssClass;

错误信息的CSS类。默认值是“errorMessage”。 个体的error调用可以通过指定“class”HTML选项来覆盖这个值。

focus 属性 (可用自 v1.1.4) public mixed $focus;

页面载入时初始化获取输入焦点的表单元素。

默认值是null,表示没有输入域拥有焦点。 如果设置为数组,第一个元素是模型,第二个元素是属性。 如果设置为字符串,那么将作为jQuery的选择器使用。

示例 - 设置页面载入时的输入焦点:

  • 'focus'=>array($model,'username') - $model->username 输入框
  • 'focus'=>'#'.CHtml::activeId($model,'username') - $model->username 输入框
  • 'focus'=>'#LoginForm_username' - ID为“LoginForm_username”的输入框
  • 'focus'=>'input[type="text"]:first' - 第一个type="text"的input元素
  • 'focus'=>'input:visible:enabled:first' - 第一个可见的,可用的input元素
  • 'focus'=>'input:text[value=""]:first' - 第一个空的input元素

htmlOptions 属性 public array $htmlOptions;

additional 渲染表单标签的HTML属性。

method 属性 public string $method;

表单提交的方式。可以是“post”或“get”。 默认值是“post”。

stateful 属性 public boolean $stateful;

是否生成有状态的表单(参见CHtml::statefulForm)。默认值是false。

summaryID 属性 (可用自 v1.1.7) protected string $summaryID;

包含汇总的错误信息的元素的ID

参见

  • errorSummary

方法详细

checkBox() 方法
public string checkBox(CModel $model, string $attribute, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$htmlOptionsarray附加的HTML属性
{return}string生成的复选框
源码: framework/web/widgets/CActiveForm.php#663 (显示) publicfunctioncheckBox($model,$attribute,$htmlOptions=array())
{
returnCHtml::activeCheckBox($model,$attribute,$htmlOptions);
}

为一个模型属性渲染一个复选框。 这个方法是CHtml::activeCheckBox的一个包装。 请参见CHtml::activeCheckBox以了解 关于此方法的参数的更多详细信息。

checkBoxList() 方法
public string checkBoxList(CModel $model, string $attribute, array $data, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$dataarray用于生成复选框组的选项的数据 (value=>display)
$htmlOptionsarray附加的HTML属性
{return}string生成的下拉列表框
源码: framework/web/widgets/CActiveForm.php#711 (显示) publicfunctioncheckBoxList($model,$attribute,$data,$htmlOptions=array())
{
returnCHtml::activeCheckBoxList($model,$attribute,$data,$htmlOptions);
}

为一个模型属性渲染一个复选框组。 这个方法是CHtml::activeCheckBoxList的一个包装。 请参见CHtml::activeCheckBoxList以了解 关于此方法的参数的更多详细信息。

dropDownList() 方法
public string dropDownList(CModel $model, string $attribute, array $data, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$dataarray用于生成列表的选项的数据 (value=>display)
$htmlOptionsarray附加的HTML属性
{return}string生成的下拉列表框
源码: framework/web/widgets/CActiveForm.php#679 (显示) publicfunctiondropDownList($model,$attribute,$data,$htmlOptions=array())
{
returnCHtml::activeDropDownList($model,$attribute,$data,$htmlOptions);
}

为一个模型属性渲染一个下拉列表框。 这个方法是CHtml::activeDropDownList的一个包装。 请参见CHtml::activeDropDownList以了解 关于此方法的参数的更多详细信息。

error() 方法
public string error(CModel $model, string $attribute, array $htmlOptions=array ( ), boolean $enableAjaxValidation=true, boolean $enableClientValidation=true)
$modelCModel模型数据
$attributestring属性名称
$htmlOptionsarray附加到div容器的标签的HTML属性。 除了所有在CHtml::error中可用的选项之外,下列选项也可以被识别:
  • validationDelay
  • validateOnChange
  • validateOnType
  • hideErrorMessage
  • inputContainer
  • errorCssClass
  • successCssClass
  • validatingCssClass
  • beforeValidateAttribute
  • afterValidateAttribute
这些选项将覆盖在options为具体的模型属性声明的相应的 选项。要查看更多关于这些选项的细节,请参见clientOptions。 注意:仅当enableAjaxValidation或enableClientValidation 设置为true时,这些选项才会被使用。

当客户端验证可用,一个名为“clientValidation”的选项也可被识别。 这个选项设置一段JavaScript代码片段以执行客户端验证,在代码中, 预定义了下列变量:
  • value: 关联到此属性的当前输入值。
  • messages: 为此属性附加的新的错误信息的数组。
  • attribute: 为此属性保留所有客户端选项的数据结构。
$enableAjaxValidationboolean是否使指定的属性的AJAX验证可用。 注意:要使AJAX验证可用,enableAjaxValidation 和这个参数都必须 设置为真。
$enableClientValidationboolean是否使指定的属性的客户端验证可用。 注意:要使AJAX验证可用,enableClientValidation 和这个参数都必须 设置为真。此参数自1.1.7版开始可用。
{return}string验证结果(显示错误或成功消息。)
源码: framework/web/widgets/CActiveForm.php#412 (显示) publicfunctionerror($model,$attribute,$htmlOptions=array(),$enableAjaxValidation=true,$enableClientValidation=true)
{
if(!$this->enableAjaxValidation)
$enableAjaxValidation=false;
if(!$this->enableClientValidation)
$enableClientValidation=false;

if(!isset($htmlOptions['class']))
$htmlOptions['class']=$this->errorMessageCssClass;

if(!$enableAjaxValidation&&!$enableClientValidation)
returnCHtml::error($model,$attribute,$htmlOptions);

$id=CHtml::activeId($model,$attribute);
$inputID=isset($htmlOptions['inputID'])?$htmlOptions['inputID']:$id;
unset($htmlOptions['inputID']);
if(!isset($htmlOptions['id']))
$htmlOptions['id']=$inputID.'_em_';

$option=array(
'id'=>$id,
'inputID'=>$inputID,
'errorID'=>$htmlOptions['id'],
'model'=>get_class($model),
'name'=>$attribute,
'enableAjaxValidation'=>$enableAjaxValidation,
);

$optionNames=array(
'validationDelay',
'validateOnChange',
'validateOnType',
'hideErrorMessage',
'inputContainer',
'errorCssClass',
'successCssClass',
'validatingCssClass',
'beforeValidateAttribute',
'afterValidateAttribute',
);
foreach($optionNamesas$name)
{
if(isset($htmlOptions[$name]))
{
$option[$name]=$htmlOptions[$name];
unset($htmlOptions[$name]);
}
}
if($modelinstanceofCActiveRecord&&!$model->isNewRecord)
$option['status']=1;

if($enableClientValidation)
{
$validators=isset($htmlOptions['clientValidation'])?array($htmlOptions['clientValidation']):array();

$attributeName=$attribute;
if(($pos=strrpos($attribute,']'))!==false&&$pos!==strlen($attribute)-1)//e.g.[a]name
{
$attributeName=substr($attribute,$pos+1);
}

foreach($model->getValidators($attributeName)as$validator)
{
if($validator->enableClientValidation)
{
if(($js=$validator->clientValidateAttribute($model,$attributeName))!='')
$validators[]=$js;
}
}
if($validators!==array())
$option['clientValidation']="js:function(value,messages,attribute){n".implode("n",$validators)."n}";
}

$html=CHtml::error($model,$attribute,$htmlOptions);
if($html==='')
{
if(isset($htmlOptions['style']))
$htmlOptions['style']=rtrim($htmlOptions['style'],';').';display:none';
else
$htmlOptions['style']='display:none';
$html=CHtml::tag('div',$htmlOptions,'');
}

$this->attributes[$inputID]=$option;
return$html;
}

显示一个模型属性的第一个验证错误。 这个方法类似于CHtml::error,不同之处是它注册了模型属性 所以当用户改变了它的值,可能会触发一个AJAX验证。

参见

  • CHtml::error
errorSummary() 方法
public string errorSummary(mixed $models, string $header=NULL, string $footer=NULL, array $htmlOptions=array ( ))
$modelsmixed要显示输入错误的模型。可以是一个 单独的模型,也可以是多个模型组成的一个数组。
$headerstring在错误信息之前被显示的一段HTML代码。
$footerstring在错误信息之后被显示的一段HTML代码。
$htmlOptionsarray用于渲染div容器标签的附加HTML属性。
{return}string错误信息汇总。如果不存在任何错误,则返回空。
源码: framework/web/widgets/CActiveForm.php#511 (显示) publicfunctionerrorSummary($models,$header=null,$footer=null,$htmlOptions=array())
{
if(!$this->enableAjaxValidation&&!$this->enableClientValidation)
returnCHtml::errorSummary($models,$header,$footer,$htmlOptions);

if(!isset($htmlOptions['id']))
$htmlOptions['id']=$this->id.'_es_';
$html=CHtml::errorSummary($models,$header,$footer,$htmlOptions);
if($html==='')
{
if($header===null)
$header='<p>'.Yii::t('yii','Pleasefixthefollowinginputerrors:').'</p>';
if(!isset($htmlOptions['class']))
$htmlOptions['class']=CHtml::$errorSummaryCss;
$htmlOptions['style']=isset($htmlOptions['style'])?rtrim($htmlOptions['style'],';').';display:none':'display:none';
$html=CHtml::tag('div',$htmlOptions,$header."n<ul><li>dummy</li></ul>".$footer);
}

$this->summaryID=$htmlOptions['id'];
return$html;
}

显示一个或多个模型的汇总的验证错误信息。 这个方法类似于CHtml::errorSummary,不同之处是 当执行AJAX验证时它同样可以工作。

参见

  • CHtml::errorSummary
fileField() 方法
public string fileField(CModel $model, string $attribute, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$htmlOptionsarray附加的HTML属性
{return}string生成的文件上传控件
源码: framework/web/widgets/CActiveForm.php#633 (显示) publicfunctionfileField($model,$attribute,$htmlOptions=array())
{
returnCHtml::activeFileField($model,$attribute,$htmlOptions);
}

为一个模型属性渲染一个文件上传控件。 这个方法是CHtml::activeFileField的一个包装。 请参见CHtml::activeFileField以了解 关于此方法的参数的更多详细信息。

hiddenField() 方法
public string hiddenField(CModel $model, string $attribute, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$htmlOptionsarray附加的HTML属性
{return}string生成的隐藏域
源码: framework/web/widgets/CActiveForm.php#588 (显示) publicfunctionhiddenField($model,$attribute,$htmlOptions=array())
{
returnCHtml::activeHiddenField($model,$attribute,$htmlOptions);
}

为一个模型属性渲染一个隐藏域。 这个方法是CHtml::activeHiddenField的一个包装, 请参见CHtml::activeHiddenField以了解 关于此方法的参数的更多详细信息。

init() 方法
public void init()
源码: framework/web/widgets/CActiveForm.php#318 (显示) publicfunctioninit()
{
if(!isset($this->htmlOptions['id']))
$this->htmlOptions['id']=$this->id;
if($this->stateful)
echoCHtml::statefulForm($this->action,$this->method,$this->htmlOptions);
else
echoCHtml::beginForm($this->action,$this->method,$this->htmlOptions);
}

初始化widget。 此方法渲染表单的开始标签。

label() 方法
public string label(CModel $model, string $attribute, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring模型的属性
$htmlOptionsarray附加的HTML属性
{return}string产生的Label标签。
源码: framework/web/widgets/CActiveForm.php#543 (显示) publicfunctionlabel($model,$attribute,$htmlOptions=array())
{
returnCHtml::activeLabel($model,$attribute,$htmlOptions);
}

为一个模型属性渲染出一个HTML Label标签。 这个方法是CHtml::activeLabel的一个包装。 请参见CHtml::activeLabel以了解更多关于 这个方法的参数的信息。

labelEx() 方法
public string labelEx(CModel $model, string $attribute, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$htmlOptionsarray附加的HTML属性
{return}string生成的Label标签
源码: framework/web/widgets/CActiveForm.php#558 (显示) publicfunctionlabelEx($model,$attribute,$htmlOptions=array())
{
returnCHtml::activeLabelEx($model,$attribute,$htmlOptions);
}

为一个模型属性渲染出一个HTML Label标签。 这个方法是CHtml::activeLabelEx的一个包装。 请参见CHtml::activeLabelEx以了解关于此方法 的参数的更多详细信息。

listBox() 方法
public string listBox(CModel $model, string $attribute, array $data, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$dataarray用于生成列表的选项的数据 (value=>display)
$htmlOptionsarray附加的HTML属性
{return}string生成的列表框
源码: framework/web/widgets/CActiveForm.php#695 (显示) publicfunctionlistBox($model,$attribute,$data,$htmlOptions=array())
{
returnCHtml::activeListBox($model,$attribute,$data,$htmlOptions);
}

为一个模型属性渲染一个列表框。 这个方法是CHtml::activeListBox的一个包装。 请参见CHtml::activeListBox以了解 关于此方法的参数的更多详细信息。

passwordField() 方法
public string passwordField(CModel $model, string $attribute, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$htmlOptionsarray附加的HTML属性
{return}string生成的密码框
源码: framework/web/widgets/CActiveForm.php#603 (显示) publicfunctionpasswordField($model,$attribute,$htmlOptions=array())
{
returnCHtml::activePasswordField($model,$attribute,$htmlOptions);
}

为一个模型属性渲染一个密码框。 这个方法是CHtml::activePasswordField的一个包装。 请参见CHtml::activePasswordField以了解 关于此方法的参数的更多详细信息。

radioButton() 方法
public string radioButton(CModel $model, string $attribute, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$htmlOptionsarray附加的HTML属性
{return}string生成的单选按钮
源码: framework/web/widgets/CActiveForm.php#648 (显示) publicfunctionradioButton($model,$attribute,$htmlOptions=array())
{
returnCHtml::activeRadioButton($model,$attribute,$htmlOptions);
}

为一个模型属性渲染一个单选按钮。 这个方法是CHtml::activeRadioButton的一个包装。 请参见CHtml::activeFileField以了解 关于此方法的参数的更多详细信息。

radioButtonList() 方法
public string radioButtonList(CModel $model, string $attribute, array $data, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$dataarray用于生成单选按钮组的选项的数据 (value=>display)
$htmlOptionsarray附加的HTML属性
{return}string生成的单选按钮组
源码: framework/web/widgets/CActiveForm.php#727 (显示) publicfunctionradioButtonList($model,$attribute,$data,$htmlOptions=array())
{
returnCHtml::activeRadioButtonList($model,$attribute,$data,$htmlOptions);
}

为一个模型属性渲染一个单选按钮组。 这个方法是CHtml::activeRadioButtonList的一个包装。 请参见CHtml::activeRadioButtonList以了解 关于此方法的参数的更多详细信息。

run() 方法
public void run()
源码: framework/web/widgets/CActiveForm.php#332 (显示) publicfunctionrun()
{
if(is_array($this->focus))
$this->focus="#".CHtml::activeId($this->focus[0],$this->focus[1]);

echoCHtml::endForm();
$cs=Yii::app()->clientScript;
if(!$this->enableAjaxValidation&&!$this->enableClientValidation||empty($this->attributes))
{
if($this->focus!==null)
{
$cs->registerCoreScript('jquery');
$cs->registerScript('CActiveForm#focus',"
if(!window.location.hash)
$('".$this->focus."').focus();
");
}
return;
}

$options=$this->clientOptions;
if(isset($this->clientOptions['validationUrl'])&&is_array($this->clientOptions['validationUrl']))
$options['validationUrl']=CHtml::normalizeUrl($this->clientOptions['validationUrl']);

$options['attributes']=array_values($this->attributes);

if($this->summaryID!==null)
$options['summaryID']=$this->summaryID;

if($this->focus!==null)
$options['focus']=$this->focus;

$options=CJavaScript::encode($options);
$cs->registerCoreScript('yiiactiveform');
$id=$this->id;
$cs->registerScript(__CLASS__.'#'.$id,"$('#$id').yiiactiveform($options);");
}

运行widget。 这个方法注册必要的javascript代码,渲染表单结束标签。

textArea() 方法
public string textArea(CModel $model, string $attribute, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$htmlOptionsarray附加的HTML属性
{return}string生成的多行文本输入控件
源码: framework/web/widgets/CActiveForm.php#618 (显示) publicfunctiontextArea($model,$attribute,$htmlOptions=array())
{
returnCHtml::activeTextArea($model,$attribute,$htmlOptions);
}

为一个模型属性渲染一个多行的文本输入控件。 这个方法是CHtml::activeTextArea的一个包装。 请参见CHtml::activeTextArea以了解 关于此方法的参数的更多详细信息。

textField() 方法
public string textField(CModel $model, string $attribute, array $htmlOptions=array ( ))
$modelCModel模型
$attributestring属性
$htmlOptionsarray附加的HTML属性
{return}string生成的输入框
源码: framework/web/widgets/CActiveForm.php#573 (显示) publicfunctiontextField($model,$attribute,$htmlOptions=array())
{
returnCHtml::activeTextField($model,$attribute,$htmlOptions);
}

为一个模型属性渲染一个输入框。 这个方法是CHtml::activeTextField的一个包装。 请参见CHtml::activeTextField以了解 关于此方法的参数的更多详细信息。

validate() 方法
public static string validate(mixed $models, array $attributes=NULL, boolean $loadInput=true)
$modelsmixed一个单独的模型实例或多个模型组成的一个数组。
$attributesarray将被验证的属性的列表。默认值是null, 表示模型的所有具有可用验证规则的属性都将被验证。 如果此参数被设定为某些属性的列表,那么只有列出的 这些属性将被验证。
$loadInputboolean是否从此方法的$_POST数组载入数据。 如果设置为真,模型将会被$_POST[ModelClass]填充。
{return}stringJSON格式表示的验证错误信息。
源码: framework/web/widgets/CActiveForm.php#744 (显示) publicstaticfunctionvalidate($models,$attributes=null,$loadInput=true)
{
$result=array();
if(!is_array($models))
$models=array($models);
foreach($modelsas$model)
{
if($loadInput&&isset($_POST[get_class($model)]))
$model->attributes=$_POST[get_class($model)];
$model->validate($attributes);
foreach($model->getErrors()as$attribute=>$errors)
$result[CHtml::activeId($model,$attribute)]=$errors;
}
returnfunction_exists('json_encode')?json_encode($result):CJSON::encode($result);
}

验证一个或多个模型,以JSON格式返回结果。 这是一个用于简化编写AJAX验证代码的方式的助手方法。

validateTabular() 方法
public static string validateTabular(mixed $models, array $attributes=NULL, boolean $loadInput=true)
$modelsmixed多个模型实例组成的数组。
$attributesarray将被验证的属性的列表。默认值是null, 表示模型的所有具有可用验证规则的属性都将被验证。 如果此参数被设定为某些属性的列表,那么只有列出的 这些属性将被验证。
$loadInputboolean是否从此方法的$_POST数组载入数据。 如果设置为真,模型将会被$_POST[ModelClass]填充。
{return}stringJSON格式表示的验证错误信息。
源码: framework/web/widgets/CActiveForm.php#772 (显示) publicstaticfunctionvalidateTabular($models,$attributes=null,$loadInput=true)
{
$result=array();
if(!is_array($models))
$models=array($models);
foreach($modelsas$i=>$model)
{
if($loadInput&&isset($_POST[get_class($model)][$i]))
$model->attributes=$_POST[get_class($model)][$i];
$model->validate($attributes);
foreach($model->getErrors()as$attribute=>$errors)
$result[CHtml::activeId($model,'['.$i.']'.$attribute)]=$errors;
}
returnfunction_exists('json_encode')?json_encode($result):CJSON::encode($result);
}

验证一个由多个模型实例组成的数组,并将验证结果以JSON格式返回。 这是一个用于简化编写表格式输入的AJAX验证代码的方式的助手方法。