第十章 資料正确性(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并不一定是人
轉載于:https://www.cnblogs.com/kuyuecs/archive/2008/11/10/1330411.html