The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ 完善任务模型 ]
跟以前完善的用户模型一样,这里的任务模型也一样。
任务模型的定义在TaskModel.class.php中init__静态方法中进行定义。
任务模型数据库表
- /**
- * 用什么数据表保存对象
- *
- * < 数据库表不带前缀 >
- *
- * @return string
- */
- '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' ), ),
说明:这里包含关联模型,具体的使用方法,我们后面会说到。
自动填充
- 'autofill' => array(
- array( 'user_id','userId','create','callback'),
- ),
说明:自动填充主要用于捕获一些预定义数据,我们这里使用userId方法来捕获数据。
- /**
- * 登录用户
- */
- public function userId(){
- return $GLOBALS['___login___']['user_id'];
- }
验证规则
- /**
- * 在保存对象时,会按照下面指定的验证规则进行验证。验证失败会发送错误,我们可以通过系统提供的方法拦截。
- *
- * < 除了在保存时自动验证,还可以通过对象的 模型::M()->check( ) 方法对数组数据进行验证。
- * 系统提供了50多个验证规则,所有验证规则可以在 DoYouHaoBaby 完全开发手册中 ~handbook\package\check\check.html中全部罗列出来。 >
- *
- * < 如果需要添加一个自定义验证,应该写成 >
- * < 'title' => array(
- *
- * array( array(__CLASS__, 'checkTitle'), '标题不能为空'),
- * ) >
- *
- * < 同时上面的验证规则,可以用基于ThinkPHP的验证规则做到,下面我们将会有实例来做。>
- *
- * @return array
- */
- 'check' => array(
- 'task_subject' => array(
- array('require', '任务主题不能为空'),
- array('max_length', 200, '任务主题不能超过 200 个字符'),
- ),
- 'task_description' => array(
- array('require', '任务描述不能为空'),
- ),
- ),
说明:验证规则主要是对提高的数据进行确认,以便于将正确的数据写入数据库中。同时,你在前端开发过程中,可以
使用javascript进行数据验证,以便于提高效率和用户体验。
最后,完后的模型定义代码如下:
class TaskModel extends Model{
- class TaskModel extends Model{
- /**
- * 返回对象的定义
- *
- * @access public
- * @static
- * @return array
- */
- static public function init__(){
- return array(
- /**
- * 用什么数据表保存对象
- *
- * < 数据库表不带前缀 >
- *
- * @return string
- */
- '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' ),
- ),
- /**
- * 拒绝使用 mass-assignment 方式赋值的属性
- *
- * < 功能同上,如果上面是白名单的话,那么下面这个就是黑名单。
- * 这里设置了属性,那么设置后的属性不能通过构造函数来赋值。 >
- *
- * @return mixed
- */
- 'attr_protected' => 'task_id',
- 'autofill' => array(
- array( 'user_id','userId','create','callback'),
- ),
- /**
- * 在保存对象时,会按照下面指定的验证规则进行验证。验证失败会发送错误,我们可以通过系统提供的方法拦截。
- *
- * < 除了在保存时自动验证,还可以通过对象的 模型::M()->check( ) 方法对数组数据进行验证。
- * 系统提供了50多个验证规则,所有验证规则可以在 DoYouHaoBaby 完全开发手册中 ~handbook\package\check\check.html中全部罗列出来。 >
- *
- * < 如果需要添加一个自定义验证,应该写成 >
- * < 'title' => array(
- *
- * array( array(__CLASS__, 'checkTitle'), '标题不能为空'),
- * ) >
- *
- * < 同时上面的验证规则,可以用基于ThinkPHP的验证规则做到,下面我们将会有实例来做。>
- *
- * @return array
- */
- 'check' => array(
- 'task_subject' => array(
- array('require', '任务主题不能为空'),
- array('max_length', 200, '任务主题不能超过 200 个字符'),
- ),
- 'task_description' => array(
- array('require', '任务描述不能为空'),
- ),
- ),
- );
- }
- /**
- * 开启一个查询,查找符合条件的对象或对象集合
- *
- * @static
- * @return DbSelect
- */
- static function F( ){
- $arrArgs = func_get_args();
- return ModelMeta::instance( __CLASS__ )->findByArgs( $arrArgs );
- }
- /**
- * 返回当前 Model 类的元数据对象
- *
- * @static
- * @return ModelMeta
- */
- static function M( ){
- return ModelMeta::instance(__CLASS__);
- }
- /**
- * 登录用户
- */
- public function userId(){
- return $GLOBALS['___login___']['user_id'];
- }
- }
To be continue!
