×
关于 Yii(About Yii)从 Yii 1.1 升级

入门(Getting Started)

安装 Yii运行应用第一次问候使用 Forms玩转 Databases用 Gii 生成代码更上一层楼(Looking Ahead)

应用结构

结构概述(Overview)入口脚本(Entry Scripts)应用(Applications)应用组件(Components)控制器(Controllers)模型(Models)视图(Views)模块(Modules)过滤器(Filters)小部件(Widgets)前端资源(Assets)扩展(Extensions)

请求处理

运行概述(Overview)引导(Bootstrapping)路由引导与创建 URL请求(Requests)响应(Responses)Sessions and Cookies错误处理(Handling Errors)日志(Logging)

关键概念(Key Concepts)

组件(Components)属性(Properties)事件(Events)行为(Behaviors)配置(Configurations)别名(Aliases)类自动加载(Class Autoloading)服务定位器(Service Locator)依赖注入容器

配合数据库工作

数据库访问(Data Access)查询生成器(Query Builder)活动记录(Active Record)数据库迁移(Migrations)SphinxRedisMongoDBElasticSearch

接收用户数据

创建表单(Creating Forms)输入验证(Validating Input)文件上传(Uploading Files)收集列表输入多模型同时输入在客户端扩展 ActiveForm

显示数据

格式化输出数据分页(Pagination)排序(Sorting)数据提供器(Data Providers)数据小部件(Data Widgets)操作客户端脚本主题(Theming)

安全(Security)

认证(Authentication)授权(Authorization)处理密码(Passwords)加密(Cryptography)客户端认证(Auth Clients)安全领域的最佳实践

缓存(Caching)

概述(Overview)数据缓存(Data Caching)片段缓存(Fragment Caching)分页缓存(Page Caching)HTTP 缓存(HTTP Caching)

RESTful Web 服务

快速入门(Quick Start)资源(Resources)控制器(Controllers)路由(Routing)格式化响应(Response Formatting)授权验证(Authentication)速率限制(Rate Limiting)版本化(Versioning)错误处理(Error Handling)

开发工具

调试工具栏和调试器使用 Gii 生成代码TBD 生成 API 文档

测试(Testing)

概述(Overview)搭建测试环境单元测试(Unit Tests)功能测试(Functional Tests)验收测试(Acceptance Tests)测试夹具(Fixtures)

高级专题(Special Topics)

高级应用模版从头构建自定义模版控制台命令核心验证器(Core Validators)Docker国际化(Internationalization)收发邮件(Mailing)性能优化共享主机环境模板引擎集成第三方代码使用 Yii 作为微框架

小部件(Widgets)

Bootstrap 小部件jQuery UI 小部件

助手类(Helpers)

助手一览(Overview)Array 助手(ArrayHelper)Html 助手(Html)Url 助手(Url)

在客户端扩展 ActiveForm


yii\widgets\ActiveForm 小部件附带一组用于客户端验证的 JavaScript 方法。 它的实现非常灵活,可以让你以不同的方式扩展它。 下面我们来看描述。

ActiveForm 事件

ActiveForm 触发一系列专用事件。使用类似以下的代码,您可以订阅这些代码 事件并处理它们:

$('#contact-form').on('beforeSubmit', function (e) {
	if (!confirm("Everything is correct. Submit?")) {
		return false;
	}
	return true;
});

在下文中,我们将查看可用的事件。

beforeValidate

beforeValidate 是在验证整个表单之前触发的。

事件处理程序的签名应该是:

function (event, messages, deferreds)

其中

  • event: 一个 Event 对象。
  • messages: 一个关联数组,其中键是属性ID, 值是相应属性的错误消息数组。
  • deferreds: 一个 Deferred 对象数组。你可以使用 deferreds.add(callback) 来添加一个新的延迟验证。

如果处理程序返回一个布尔型 false,它将在此事件后停止进一步的表单验证。 结果 afterValidate 事件将不会被触发。

afterValidate

afterValidate 是在验证整个表单后触发的。

事件处理程序的签名应该是:

function (event, messages, errorAttributes)

其中

  • event: 一个 Event 对象。
  • messages: 一个关联数组,其中键是属性ID, 值是相应属性的错误消息数组。
  • errorAttributes: 一个具有验证错误的属性数组。有关此参数的结构, 请参阅 attributeDefaults

beforeValidateAttribute

beforeValidateAttribute 事件是在验证属性之前触发的。 事件处理程序的签名应该是:

function (event, attribute, messages, deferreds)

其中

  • event: 一个 Event 对象。
  • attribute: 要验证的属性。 请参阅这个参数的 attributeDefaults 结构。
  • messages: 可以为其添加指定属性的验证错误消息的数组。
  • deferreds: 一个 Deferred 对象数组。你可以使用 deferreds.add(callback) 来添加一个新的延迟验证。

如果处理程序返回布尔型 false,它将停止进一步验证指定的属性。 结果,afterValidateAttribute 事件将不会被触发。

afterValidateAttribute

afterValidateAttribute 事件在验证整个表单和每个属性后触发的。

事件处理程序的签名应该是:

function (event, attribute, messages)

其中

  • event: 一个 Event 对象。
  • attribute: 该属性会被验证。有关此参数的结构, 请参阅 attributeDefaults
  • messages: 可以为其添加指定属性的其他验证错误消息的 数组。

beforeSubmit

beforeSubmit 是在所有验证通过后且提交表单之前触发的。

事件处理程序的签名应该是:

function (event)

其中 event 是一个 Event 对象。

如果处理返回布尔型“false”,它将停止表单提交。

ajaxBeforeSend

ajaxBeforeSend 事件是在发送用于基于AJAX的验证的AJAX请求之前触发的。

事件处理程序的签名应该是:

function (event, jqXHR, settings)

其中

  • event: 一个 Event 对象。
  • jqXHR: 一个 jqXHR 对象
  • settings: AJAX 请求的设置

ajaxComplete

ajaxComplete 事件是在完成基于 AJAX 验证的 AJAX 请求后触发的。

事件处理程序的签名应该是:

function (event, jqXHR, textStatus)

where

  • event: 一个 Event 对象。
  • jqXHR: 一个 jqXHR 对象
  • textStatus: 请求的状态 ("success", "notmodified", "error", "timeout", "abort", or "parsererror")。

通过 AJAX 提交表单

虽然可以在客户端或通过 AJAX 请求进行验证,但作为默认的正常请求 表单提交本身已完成。如果你想通过 AJAX 提交表单,你可以 通过以下方式处理表单的 beforeSubmit 事件做到这一点:

var $form = $('#formId');
$form.on('beforeSubmit', function() {
    var data = $form.serialize();
    $.ajax({
        url: $form.attr('action'),
        type: 'POST',
        data: data,
        success: function (data) {
            // 执行成功
        },
        error: function(jqXHR, errMsg) {
            alert(errMsg);
        }
     });
     return false; // 防止默认提交
});

要了解更多关于 jQuery ajax() 函数的信息,请参阅 jQuery 文档

动态添加字段

在现代 Web 应用程序中,您经常需要在向用户显示表单后更改表单。 这可以例如在点击“加号”图标之后添加新的字段。 要为这些字段启用客户端验证,他们必须注册 ActiveForm JavaScript 插件。

您必须自行添加一个字段,然后将其添加到验证列表中:

$('#contact-form').yiiActiveForm('add', {
    id: 'address',
    name: 'address',
    container: '.field-address',
    input: '#address',
    error: '.help-block',
    validate:  function (attribute, value, messages, deferred, $form) {
        yii.validation.required(value, messages, {message: "Validation Message Here"});
    }
});

要从验证列表中删除一个字段,使它不被验证,您可以执行以下操作:

$('#contact-form').yiiActiveForm('remove', 'address');

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)