当前位置: 首页 > 工具软件 > CakePHP > 使用案例 >

CakePHP中文教程6

丁灿
2023-12-01

第十章 数据正确性(Data Validation)

创建用户的数据正确规则可以确保model中的数据能够按照程序的业务规则,比如密码必须是8个字符,用户名仅仅包含字母等等

保证数据正确性,第一步要做的就是在model中创建数据正确的规则。使用Model::validate这个数组在model中定义,比如

例10.1 /app/models/user.php

<?php
class User extends AppModel {
   var $validate = array(
      'login' => '/[a-z0-9/_/-]{3,}/i',
      'password' => VALID_NOT_EMPTY,
      'email' => VALID_EMAIL,
      'born' => VALID_NUMBER
   );
}
?>


Validations定义使用perl的正则表达式,其中有一些事先定义在/libs/validators.php比如


VALID_NOT_EMPTY
VALID_NUMBER
VALID_EMAIL
VALID_YEAR


如果model的定义中(比如在$validate数组)出现了任何的validateions,都会在保存过程中被转化和检查(比如在Model::save()方法中)。确保数据正确可以直接使用Model::validates()(如果数据不正确则直接返回false)或者Model::invalidFields()(这个方法返回错误信息的一个数组)

但是通常,controller代码中数据都是隐式的,下面的例子解释了如何创建一个处理form的方法


<?php
class BlogController extends AppController {
   function add () {
      if (empty($this->params['data'])) {
         $this->render();
      }
      else {
         $this->post->set($this->params['data']);
         if ($this->post->save()) {
            $this->flash('Your post has been saved.','/blog');
         }
         else {
            $this->set('data', $this->params['data']);
            $this->validateErrors($this->post);
            $this->render();
         }
      }
   }
}
?>

这个方法使用的view如下:


<h2>Add post to blog</h2>
<?=$this->formTag('/blog/add')?>
<div class="blog_add">
<p>Title: <?= $html->inputTag('title', 40)?>
   <?=$this->tagErrorMsg('title', 'Title is required.')?></p>
<p><?=$this->areaTag('body') ?>
   <?=$this->tagErrorMsg('body', 'Body is required.')?></p>
<p><?=$this->submitTag('Save')?></p>
</div>
</form>

Controller::validates($model[,$model…])方法用来检查添加到model的用户数据是否正确。Controller::validationErrors()方法返回model得到的错误信息,这些信息被view的tagErrorMsg()方法显示出来

 

第十一章 访问控制表(Access Control Lists)

1 理解ACL如何工作

       大多数权限很大的程序都需要某种形式的访问控制。ACL就是一种管理程序权限的简单持久的方法。ACL主要管理两件事情。需要东西的主体,和被需要的客体。在ACL系统中,想要东西的主体(经常情况下是用户)叫做access request objects,简称AROs。系统中被需要的客体(经常是方法或数据)叫做access control objects,简称ACOs。这些实体被成为objects是因为有时候被请求的object并不一定是人

 
 类似资料: