IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Open source  >

使用 CakePHP 快速打造 Web 站点,第 1 部分: 入门

轻松快捷的 PHP 快速开发辅助工具

developerWorks
前一页第 4 页,共 11 页后一页

文档选项

样例代码


对本教程的评价

帮助我们改进这些内容


helper

CakePHP 中的 helper 主要用于帮助提高视图的开发速度。HTML、Ajax、JavaScript 等等都有 helper。通过使用 helper,可以更轻松地插入要多次编写的 HTML 代码片段。

修改 users_controller.php 文件

为了使用 helper,需要修改前面创建的 users_controller.php 文件。应该给控制器命名,并告诉它希望使用一些 helper(在这个示例中,是 HTML 和 Form helper)。编辑这个文件,添加 $name$helpers 类变量。


清单 14. users 控制器
					
<?php
class UsersController extends AppController
{
    var $name = 'Users';

    var $helpers = array('Html', 'Form' );



    function register()

    {

...

现在已经在控制器中包含了 helper,可以开始使用它们了。





回页首


更轻松地创建表

Tor 的用户应当能够查看注册使用该应用程序的其他用户。CakePHP 有大量 helper 可用于帮助创建表。这些 helper 包括很多有用的功能,其中一些功能您可能不止一次编写过。为了演示此功能,将创建一个用于显示注册用户的视图。

首先,在 users 控制器中创建 knownusers 操作。


清单 15. 创建 knownusers 操作
					
function knownusers()
{
$this->set('knownusers',
$this->User->findAll(null, array('id', 'username', 'first_name',
'last_name'), 'id DESC')
);
}
                

这将调用 user 模型中的内置函数 findAllfindAll 函数接受一个包含条件的字段(在本例中,传递的是 null 条件,该条件将返回所有用户)、要返回的字段数组(不需要所有用户信息,只需要希望所有人都看到的信息)以及一个排序字段和顺序(在本例中,用 id DESC 按 ID 降序排序)。还可以指定限制(返回的最大行数)、分页(如果要给数据分页)以及可用于指定返回与数据关联的模型的递归选项(例如,查询一个 groups 表和属于每个组的若干个用户)。

findAll 的输出被放入 knownusers 变量。现在就可以从视图访问数据了。





回页首


创建 knownusers 视图

在文本编辑器中创建文件 app/views/users/knownusers.ctp。要查看 findAll 返回的数据,应该使用 var_dump 输出 knownusers 变量。


清单 16. 使用 var_dump 输出 knownusers 变量
					
<pre>
<?php var_dump($knownusers) ?>
</pre>
                

访问位于 http://localhost/users/knownusers 的视图。应当会看到一个用户数据数组。


图 7. 结果
结果

如果只列出了一个用户,请返回到 http://localhost/users/register,然后多注册一些用户。最终的结果将会更令人印象深刻。

获得足够大的用户数组了吗?很好!现在就将它转换为一个表。用以下内容替换 knownusers.thtml 的内容。


清单 17. 创建表
					
<table>
<?php 

echo $html->tableHeaders(array_keys($knownusers[0]['User']));

foreach ($knownusers as $thisuser)
{
	echo $html->tableCells($thisuser['User']);
}

?>
</table>
                

第一个 helper 将从数据数组(本例中为用户的键列表)创建一组表标题。第二个 helper 将从数据数组(本例中为每个用户的值)创建一组包围在表行标记中的表单元格。

好的!保存它,然后访问 http://localhost/users/knownusers 来查看结果。


图 8. 结果
结果

通过使用 tableCells helper,不必再编写循环遍历用户数据数组的代码。这仅仅是通过 helper 更轻松地在 CakePHP 中使用 HTML 的一个示例。





回页首


生成表单

构建不使用表单的 Web 应用程序就像给小鸡喂奶一样:极为复杂,而且基本上是白费工夫。良好的可维护的表单是任何良好的应用程序的基础。如果需要经常构建表单,自然会希望找到能更轻松地完成此过程的方法。


在注册表单中使用 helper

在生成表单时 helper 尤为有用。可以使用它们为输入字段生成 HTML,以及生成占位符来保存检验错误消息。使用 helper 为 Tor 生成表单字段和错误消息占位符,register 视图可能类似于清单 18。


清单 18. 使用 helper 生成注册表单
					
<p>Please fill out the form below to register an account.</p>
<?php echo $form->create('User', array('action' => 'register'));?>

<?php
    echo $form->input('first_name');
    echo $form->input('last_name');
    echo $form->input('username');
    echo $form->input('email');
    echo $form->input('password');
?>

<?php echo $form->end('Register');?>
                

如您所见,使用 CakePHP 的 helper 可以节省编写基本表单元素所需的大量时间。现在来看看如何更充分地利用 helper。





回页首


充分利用 helper

要想通过 helper 获得更多的收益,需要做两件事:更新 users 控制器并引入一小段数据检验。打开 controllers/users_controller.php,然后将 register 函数改为清单 19 所示的内容。


清单 19. 更新 users 控制器
					
function register()
{
  if (!empty($this->data))
  {
    if ($this->User->save($this->data))
    {
      $this->Session->setFlash('Your registration information was accepted.');
    }
  }
}
                

注意,出现 $this->params['form'] 的位置都已改为 $this->data

现在,打开 user 模型并添加一小段数据检验(稍后详细说明)。现在,按照清单 20 修改 user 模型。


清单 20. 修改 user 模型
					
<?php
class User extends AppModel
{
  var $name = 'User';

  var $validate = array(
    'username' => VALID_NOT_EMPTY,
    'password' => VALID_NOT_EMPTY,
    'email' => VALID_EMAIL
  );
}
?>
                

简单解释一下,$validate 数组包含用于检验的条目,由键(表单字段名)和用于评估数据的正则表达式组成。没必要检验所有表单字段。在清单 20 中,last_namefirst_name 是可选的。CakePHP 附带了若干个预定义的用于数据检验的正则表达式。VALID_NOT_EMPTY 仅用于确保字段不为空。VALID_EMAIL 用于检验字符串像不像电子邮件地址。

现在来试着运行一下。尝试提交没有数据的表单,将一个或两个必填字段留空,提供无效的电子邮件地址。您看到了什么?


图 9. 首次尝试数据检验
首次尝试数据检验

现在,再来尝试一次,这次缺少不同的数据。


图 10. 第二次尝试数据检验
第二次尝试数据检验

应当注意的一件事是,CakePHP 会自动显示和关闭错误消息。还应当注意,CakePHP 会记住并填充表单字段的值,无需您执行任何操作。

这就是最大的收益。您不必做哪些操作呢?一方面,不必告诉表单字段重新填充来自 _POST 数组的信息。CakePHP 替您执行了此操作。不必检查每个字段以查找错误,并有条件地单独显示每个消息。CakePHP 替您执行了此操作。不必确保将标记设置为有效的 xhtml。CakePHP 也替您执行了此操作。





回页首


helper 说明

本教程只涉及了 helper 的皮毛。这个主题非常广泛,可以针对它撰写一个完整的教程。了解如何更好地使用 helper 将会帮助您进一步加快 CakePHP 开发。CakePHP 包含用于 Ajax(使用 prototype.js)、JavaScript、数字转换、文本处理、日期、时间等方面的 helper。要了解这些 helper 的更多信息,请查看手册(请参阅 参考资料)。


前一页第 4 页,共 11 页后一页
    关于 IBM 隐私条约 联系 IBM 使用条款