CActiveForm
包 | 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调用“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
方法和对它的调用。公共属性
隐藏继承属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
action | mixed | 表单动作的URL (参见CHtml::normalizeUrl以了解更多关于此参数的细节)。 如果未设置,将使用当前页面的URL。 | CActiveForm |
actionPrefix | string | actions的ID的前缀。 当微件在CController::actions中声明了 动作提供者,可以为其动作的ID指定前缀以区别 于别的微件或控制器。当微件用于控制器 的视图中时,必须配置同样的前缀。 | CWidget |
clientOptions | array | 传递给JavaScript验证插件的选项数组。
目前支持下列选项:
| CActiveForm |
controller | CController | 返回此微件所属的控制器。 | CWidget |
enableAjaxValidation | boolean | 是否使基于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 |
enableClientValidation | boolean | 是否使客户端验证可用。默认值是false。
当此属性设置为true,支持它的验证器将执行客户端验证。 (参见CValidator::enableClientValidation和CValidator::clientValidateAttribute。) | CActiveForm |
errorMessageCssClass | string | 错误信息的CSS类。默认值是“errorMessage”。 个体的error调用可以通过指定“class”HTML选项来覆盖这个值。 | CActiveForm |
focus | mixed | 页面载入时初始化获取输入焦点的表单元素。
默认值是null,表示没有输入域拥有焦点。 如果设置为数组,第一个元素是模型,第二个元素是属性。 如果设置为字符串,那么将作为jQuery的选择器使用。 示例 - 设置页面载入时的输入焦点:
| CActiveForm |
htmlOptions | array | additional 渲染表单标签的HTML属性。 | CActiveForm |
id | string | 返回此微件的ID。如果需要的话,将生产一个新的ID并将其返回。 | CWidget |
method | string | 表单提交的方式。可以是“post”或“get”。 默认值是“post”。 | CActiveForm |
owner | CBaseController | 返回此微件的所有者或创建者。 | CWidget |
skin | mixed | 微件使用的皮肤的名称。默认为“default”。 如果此属性设置为false,微件将不会有皮肤被使用。 | CWidget |
stateful | boolean | 是否生成有状态的表单(参见CHtml::statefulForm)。默认值是false。 | CActiveForm |
viewPath | string | 返回包含此微件所需的视图文件的路径。 | CWidget |
受保护属性
隐藏继承属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
attributes | array | 用于模型属性的javascript选项 (input ID => options) | CActiveForm |
summaryID | string | 包含汇总的错误信息的元素的ID | CActiveForm |
公共方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
__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
传递给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
错误信息的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元素
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的复选框 |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$data | array | 用于生成复选框组的选项的数据 (value=>display) |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的下拉列表框 |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$data | array | 用于生成列表的选项的数据 (value=>display) |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的下拉列表框 |
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) | ||
$model | CModel | 模型数据 |
$attribute | string | 属性名称 |
$htmlOptions | array | 附加到div容器的标签的HTML属性。
除了所有在CHtml::error中可用的选项之外,下列选项也可以被识别:
当客户端验证可用,一个名为“clientValidation”的选项也可被识别。 这个选项设置一段JavaScript代码片段以执行客户端验证,在代码中, 预定义了下列变量:
|
$enableAjaxValidation | boolean | 是否使指定的属性的AJAX验证可用。 注意:要使AJAX验证可用,enableAjaxValidation 和这个参数都必须 设置为真。 |
$enableClientValidation | boolean | 是否使指定的属性的客户端验证可用。 注意:要使AJAX验证可用,enableClientValidation 和这个参数都必须 设置为真。此参数自1.1.7版开始可用。 |
{return} | string | 验证结果(显示错误或成功消息。) |
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
public string errorSummary(mixed $models, string $header=NULL, string $footer=NULL, array $htmlOptions=array ( )) | ||
$models | mixed | 要显示输入错误的模型。可以是一个 单独的模型,也可以是多个模型组成的一个数组。 |
$header | string | 在错误信息之前被显示的一段HTML代码。 |
$footer | string | 在错误信息之后被显示的一段HTML代码。 |
$htmlOptions | array | 用于渲染div容器标签的附加HTML属性。 |
{return} | string | 错误信息汇总。如果不存在任何错误,则返回空。 |
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
public string fileField(CModel $model, string $attribute, array $htmlOptions=array ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的文件上传控件 |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的隐藏域 |
publicfunctionhiddenField($model,$attribute,$htmlOptions=array())
{
returnCHtml::activeHiddenField($model,$attribute,$htmlOptions);
}
为一个模型属性渲染一个隐藏域。 这个方法是CHtml::activeHiddenField的一个包装, 请参见CHtml::activeHiddenField以了解 关于此方法的参数的更多详细信息。
init() 方法public void init() |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 模型的属性 |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 产生的Label标签。 |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的Label标签 |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$data | array | 用于生成列表的选项的数据 (value=>display) |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的列表框 |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的密码框 |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的单选按钮 |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$data | array | 用于生成单选按钮组的选项的数据 (value=>display) |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的单选按钮组 |
publicfunctionradioButtonList($model,$attribute,$data,$htmlOptions=array())
{
returnCHtml::activeRadioButtonList($model,$attribute,$data,$htmlOptions);
}
为一个模型属性渲染一个单选按钮组。 这个方法是CHtml::activeRadioButtonList的一个包装。 请参见CHtml::activeRadioButtonList以了解 关于此方法的参数的更多详细信息。
run() 方法public void run() |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的多行文本输入控件 |
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 ( )) | ||
$model | CModel | 模型 |
$attribute | string | 属性 |
$htmlOptions | array | 附加的HTML属性 |
{return} | string | 生成的输入框 |
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) | ||
$models | mixed | 一个单独的模型实例或多个模型组成的一个数组。 |
$attributes | array | 将被验证的属性的列表。默认值是null, 表示模型的所有具有可用验证规则的属性都将被验证。 如果此参数被设定为某些属性的列表,那么只有列出的 这些属性将被验证。 |
$loadInput | boolean | 是否从此方法的$_POST数组载入数据。
如果设置为真,模型将会被$_POST[ModelClass] 填充。 |
{return} | string | JSON格式表示的验证错误信息。 |
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) | ||
$models | mixed | 多个模型实例组成的数组。 |
$attributes | array | 将被验证的属性的列表。默认值是null, 表示模型的所有具有可用验证规则的属性都将被验证。 如果此参数被设定为某些属性的列表,那么只有列出的 这些属性将被验证。 |
$loadInput | boolean | 是否从此方法的$_POST数组载入数据。
如果设置为真,模型将会被$_POST[ModelClass] 填充。 |
{return} | string | JSON格式表示的验证错误信息。 |
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验证代码的方式的助手方法。