CakePHP Data Bindings

Posted on 21st September 2005 by Nio in CakePHP, 程序人生

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

No Comments »

No comments yet.

Leave a comment