The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ 完善任务模型 ]

跟以前完善的用户模型一样,这里的任务模型也一样。

任务模型的定义在TaskModel.class.php中init__静态方法中进行定义。

任务模型数据库表

  1. /**  
  2.  * 用什么数据表保存对象  
  3.  *  
  4.  * < 数据库表不带前缀 >  
  5.  *  
  6.  * @return string  
  7.  */  
  8.  'table_name' => 'task',  



属性

/** * 指定数据表记录字段与对象属性之间的映射关系 * * < 指示模型中各个属性、关联的设置 * 没有在这里指定设置的数据表字段自动成为模型的普通属性。 * 例如数据表中有 user_id、user_title 两个字段,而 props 中 * 没有指定 user_title 属性的设置,则 user_title 字段成为该模型的 user_title 属性,并且可以读写。> * * @return array */ 'props' => array( // 主键应该是只读,确保领域对象的“不变量” 'task_id' => array( 'readonly' => true ), 'user' => array( Db::BELONGS_TO => 'UserModel', 'target_key' => 'user_id' ), ),

说明:这里包含关联模型,具体的使用方法,我们后面会说到。

自动填充

  1. 'autofill' => array(   
  2.   
  3.                 array( 'user_id','userId','create','callback'),   
  4. ),  


说明:自动填充主要用于捕获一些预定义数据,我们这里使用userId方法来捕获数据。
  1. /**  
  2.      * 登录用户  
  3.      */  
  4.      public function userId(){   
  5.            
  6.         return $GLOBALS['___login___']['user_id'];   
  7.      }  



验证规则

  1.  /**  
  2.          * 在保存对象时,会按照下面指定的验证规则进行验证。验证失败会发送错误,我们可以通过系统提供的方法拦截。  
  3.          *  
  4.          * < 除了在保存时自动验证,还可以通过对象的 模型::M()->check( ) 方法对数组数据进行验证。  
  5. *   系统提供了50多个验证规则,所有验证规则可以在 DoYouHaoBaby 完全开发手册中 ~handbook\package\check\check.html中全部罗列出来。 >  
  6.          *  
  7.          * < 如果需要添加一个自定义验证,应该写成 >  
  8.          * < 'title' => array(  
  9. *  
  10.          *     array( array(__CLASS__, 'checkTitle'), '标题不能为空'),  
  11.          *  ) >  
  12.          *  
  13.          * < 同时上面的验证规则,可以用基于ThinkPHP的验证规则做到,下面我们将会有实例来做。>  
  14.    *  
  15. * @return array  
  16.          */  
  17.         'check' => array(   
  18.   
  19.             'task_subject' => array(   
  20.   
  21.                 array('require', '任务主题不能为空'),   
  22.                 array('max_length', 200, '任务主题不能超过 200 个字符'),   
  23.             ),   
  24.   
  25.             'task_description' => array(   
  26.   
  27.                 array('require', '任务描述不能为空'),   
  28.            ),   
  29.   
  30.         ),  


说明:验证规则主要是对提高的数据进行确认,以便于将正确的数据写入数据库中。同时,你在前端开发过程中,可以
使用javascript进行数据验证,以便于提高效率和用户体验。

最后,完后的模型定义代码如下:
class TaskModel extends Model{

  1. class TaskModel extends Model{   
  2.   
  3.   
  4.     /**  
  5.      * 返回对象的定义  
  6.      *  
  7.      * @access public  
  8.      * @static  
  9.      * @return array  
  10.      */  
  11.     static public function init__(){   
  12.   
  13.         return array(   
  14.   
  15.             /**  
  16.              * 用什么数据表保存对象  
  17.              *  
  18.              * < 数据库表不带前缀 >  
  19.              *  
  20.              * @return string  
  21.              */  
  22.             'table_name' => 'task',   
  23.   
  24.             /**  
  25.              * 指定数据表记录字段与对象属性之间的映射关系  
  26.              *  
  27.              * < 指示模型中各个属性、关联的设置  
  28.              *   没有在这里指定设置的数据表字段自动成为模型的普通属性。  
  29.              *   例如数据表中有 user_id、user_title 两个字段,而 props 中  
  30.              *   没有指定 user_title 属性的设置,则 user_title 字段成为该模型的 user_title 属性,并且可以读写。>  
  31.              *  
  32.              * @return array  
  33.              */  
  34.             'props' => array(   
  35.   
  36.                 // 主键应该是只读,确保领域对象的“不变量”   
  37.                 'task_id' => array( 'readonly' => true ),   
  38.                 'user' => array( Db::BELONGS_TO => 'UserModel', 'target_key' => 'user_id' ),   
  39.             ),   
  40.   
  41.   
  42.             /**  
  43.              * 拒绝使用 mass-assignment 方式赋值的属性  
  44.              *  
  45.              * < 功能同上,如果上面是白名单的话,那么下面这个就是黑名单。  
  46.              *   这里设置了属性,那么设置后的属性不能通过构造函数来赋值。 >  
  47.              *  
  48.              * @return mixed  
  49.              */  
  50.             'attr_protected' => 'task_id',   
  51.   
  52.             'autofill' => array(   
  53.   
  54.                 array( 'user_id','userId','create','callback'),   
  55.              ),   
  56.   
  57.   
  58.             /**  
  59.              * 在保存对象时,会按照下面指定的验证规则进行验证。验证失败会发送错误,我们可以通过系统提供的方法拦截。  
  60.              *  
  61.              * < 除了在保存时自动验证,还可以通过对象的 模型::M()->check( ) 方法对数组数据进行验证。  
  62.              *   系统提供了50多个验证规则,所有验证规则可以在 DoYouHaoBaby 完全开发手册中 ~handbook\package\check\check.html中全部罗列出来。 >  
  63.              *  
  64.              * < 如果需要添加一个自定义验证,应该写成 >  
  65.              * < 'title' => array(  
  66.              *  
  67.              *     array( array(__CLASS__, 'checkTitle'), '标题不能为空'),  
  68.              *  ) >  
  69.              *  
  70.              * < 同时上面的验证规则,可以用基于ThinkPHP的验证规则做到,下面我们将会有实例来做。>  
  71.              *  
  72.              * @return array  
  73.              */  
  74.             'check' => array(   
  75.   
  76.                 'task_subject' => array(   
  77.   
  78.                     array('require', '任务主题不能为空'),   
  79.                     array('max_length', 200, '任务主题不能超过 200 个字符'),   
  80.                 ),   
  81.     
  82.                 'task_description' => array(   
  83.     
  84.                     array('require', '任务描述不能为空'),   
  85.                ),   
  86.   
  87.             ),   
  88.   
  89.         );   
  90.   
  91.     }   
  92.   
  93.   
  94.     /**  
  95.      * 开启一个查询,查找符合条件的对象或对象集合  
  96.      *  
  97.      * @static  
  98.      * @return DbSelect  
  99.      */  
  100.     static function F( ){   
  101.   
  102.         $arrArgs = func_get_args();   
  103.         return ModelMeta::instance( __CLASS__ )->findByArgs( $arrArgs );   
  104.     }   
  105.   
  106.   
  107.     /**  
  108.      * 返回当前 Model 类的元数据对象  
  109.      *  
  110.      * @static  
  111.      * @return ModelMeta  
  112.      */  
  113.     static function M( ){   
  114.   
  115.         return ModelMeta::instance(__CLASS__);   
  116.     }   
  117.   
  118.     /**  
  119.      * 登录用户  
  120.      */  
  121.      public function userId(){   
  122.            
  123.         return $GLOBALS['___login___']['user_id'];   
  124.      }   
  125.   
  126. }  

To be continue!