CakePHP Data Bindings
Cake Framework 开始变得越来越流行了,这也得益于 Ruby On Rails 的流行,因为 Cake 是参考 ROR 写的 PHP 实现框架。而 CakePHP Data Bindings 则是可以在 Cake 中使用的一个模块,其主要作用是应用 AJAX 绑定客户端、服务器端的对象数据。这种绑定可以是客户端对象之间的绑定,客户端对象指的是 JavaScript 对象,如:
<label>Source Text Box:
<input id="example1_first" type="text" size="25" />
</label>
<label>Destination Text Box:
<input id="example1_second" type="text" size="25" />
</label>
<?= $binding->bind('example1_first.value', 'example1_second.value'); ?>
这段代码将会绑定两个客户端对象 example1_first 和 example1_second,当在第一个文本框中输入之后按“回车”,第二个文本框中就会自动填入第一个文本框所输入的文本。bind() 方法的第一个参数为“源”,第二个参数为“目标”。
接下来看看客户端与服务器端之间的对象数据绑定,服务器端对象可以是 Cake 的 Action URL,如:'/controller/action',而这个 URL 在 Cake 中最终映射到控制器的一个方法,方法名为 'action'。这个绑定之间的数据传输应用了 AJAX,Cake 中的 AJAX 类为 Prototype(之前曾经介绍过),Rail 也用这个。下面是客户端与服务器端对象数据绑定的示例:
<label>Source Text Box:
<input id="example2_first" type="text" size="25" />
</label>
<label>Target Text Box:
<input id="example2_second" type="text" size="25" />
</label>
<?= $binding->bind('example2_first.value', '/example/uppercase'); ?>
<?= $binding->bind('/example/uppercase', 'example2_second.value'); ?>
这里用了两次绑定操作,第一次是将第一个文本框 example2_first.value 绑定到服务器端的 Cake URL 中,在第一个文本框中输入之后提交会触发第一个绑定,也就是把文本框中输入的内容提交给服务器的 URL:'/example/uppercase',而 URL '/example/uppercase' 则自动映射为控制器 ExampleController 的方法 uppercase(),看看这个方法的代码:
function uppercase() {
$this->processBindingRequest();
if ($this->requestType == 'put')
$_SESSION['uppercased_value'] = strtoupper($this->requestValue);
$this->set('value', $_SESSION['uppercased_value']);
}
此方法调用 processBindingRequest() 获取提交过来的数据,然后再设置到 'value' 中。接着第二个绑定开始工作,将服务器的 '/example/uppercase' 绑定到 example2_second.value,即在第二个文本框中显示第一个文本框字符的大写形式。
如此复杂的 AJAX 通信过程,只需要几行代码即可实现,而且开发者可以将更多的精力放在控制器的 ACTION 开发上,而不需要关心 JS 对象和控制器对象是如何通信的。更多的示例参见 CakePHP Data Bindings。
