V2.0 - Behavior使用集合
yoyocmf 2020-02-28 11:29:53

 1、created_at, updated_at 更新时间和创建时间

PHP Code复制内容到剪贴板
  1. public function behaviors()    
  2.   {    
  3.      
  4.      return [    
  5.           [    
  6.               'class' => TimestampBehavior::className(),    
  7.               'createdAtAttribute' => 'create_time',// 自己根据数据库字段修改    
  8.               'updatedAtAttribute' => 'update_time'// 自己根据数据库字段修改    
  9.               'value' => time(), // 自己根据数据库字段修改    
  10.           ],    
  11.       ];    
  12.  }   

 

 

PHP Code复制内容到剪贴板
  1. use yii\behaviors\TimestampBehavior;    
  2.     
  3. public function behaviors()    
  4. {    
  5.     return [    
  6.         TimestampBehavior::className(),    
  7.     ];    
  8. }   

 

 

PHP Code复制内容到剪贴板
  1. public function behaviors()    
  2. {    
  3.     return [    
  4.         [    
  5.             'class' => TimestampBehavior::className(),    
  6.             'updatedAtAttribute' => false    
  7.         ]    
  8.     ];    
  9. }    

 

2、行为记录

PHP Code复制内容到剪贴板
  1. public function behaviors()  
  2. {  
  3.     return [  
  4.         TimestampBehavior::className(),  
  5.         [  
  6.             'class' => EnewsdologBehavior::className(),  
  7.             'defaultDoing' => '自定义文字[{info.tempname}]'  
  8.         ]  
  9.     ];  
  10. }  

写入的操作日志内容示例如下(acn是username用户名):

acn在2021-03-05 16:13新增招投标项目 [xxxx项目]

acn在2021-03-05 16:16编辑招投标项目 [xxxx项目]

acn在2021-03-05 16:17删除招投标项目 [xxxx项目]

 

2021-03-05新增附加字段,自定义内容

PHP Code复制内容到剪贴板
  1.     public function behaviors()  
  2.     {  
  3.         return [  
  4.             TimestampBehavior::className(),  
  5.             [  
  6.                 'class' => EnewsdologBehavior::className(),  
  7. //                'defaultDoing' => '招投标项目 [{info.title}]',  
  8.                 'content' => '{profile.true_name}在{extra.time}{doing}招投标项目{info.title}',  
  9.                 'data' => [  
  10.                     'extra' => [  
  11.                         'time' => date('Y-m-d H:i:s')  
  12.                     ]  
  13.                 ]  
  14.             ]  
  15.         ];  
  16.     }  

无需defaultDoing,自定义内容,profile对应的profile用户副表,也可以写user对应的字段名,extra是附加字段,自己想加什么就写什么,也有默认的时间是{current_time}

写入的操作日志内容示例如下(管理员是true_name真实姓名):

管理员在2021-03-05 14:54:18新增招投标项目xxxx项目

管理员在2021-03-05 15:32:52编辑招投标项目xxxx项目

管理员在2021-03-05 15:33:23删除招投标项目xxxx项目

 

PHP Code复制内容到剪贴板
  1. 'entity' => __CLASS__   // 定义为当前model,方便查询,不然API的model与backend的namespace不一致  

 

3、记录用户ID在新增时写入user_id字段

PHP Code复制内容到剪贴板
  1. public function behaviors()  
  2.     {  
  3.         return [  
  4.             TimestampBehavior::className(),  
  5.             [  
  6.                 'class' => BlameableBehavior::className(),  
  7.                 'createdByAttribute' => 'user_id',  
  8.                 'updatedByAttribute' => false  
  9.             ]  
  10.         ];  
  11.     }  

 

4、获取常用的用户信息

PHP Code复制内容到剪贴板
  1. public function behaviors()  
  2. {  
  3.     return [  
  4.         ...  
  5.         UserBehavior::className()  
  6.     ];  
  7. }  

 

默认字段是根据user_id获取用户信息,也可指定字段名

PHP Code复制内容到剪贴板
  1. [  
  2.     "class" => UserBehavior::className(),  
  3.     "userIdAttribute" => "member_id"  
  4. ]  

 

 

5、顶踩

PHP Code复制内容到剪贴板
  1. use common\behaviors\VoteBehavior;  
  2.   
  3.     public function behaviors()  
  4.     {  
  5.         return [  
  6.             ...  
  7.             [  
  8.                 'class' => VoteBehavior::className(),  
  9.                 'entity' => __CLASS__  
  10.             ],  
  11.         ];  
  12.     }  

 

6、标签(仅用于document模块)

PHP Code复制内容到剪贴板
  1. use common\behaviors\TagBehavior;    
  2.     
  3.     public function behaviors()    
  4.     {    
  5.         return [    
  6.             ...    
  7.             TagBehavior::className(),   
  8.         ];    
  9.     }    

 

7、软删除

执行删除:model->softDelete(),写入deleted_at软删除时间

执行恢复:model->restore(),更新deleted_at删除时间为null

 

PHP Code复制内容到剪贴板
  1. use common\behaviors\SoftDeleteBehavior;    
  2.       
  3.     public function behaviors()      
  4.     {      
  5.         return [      
  6.             ...      
  7.             [  
  8.                 'class' => SoftDeleteBehavior::className(),  
  9.                 'softDeleteAttributeValues' => [  
  10.                     'deleted_at' => function ($model) {  
  11.                         return time();  
  12.                     }  
  13.                 ],  
  14.                 'restoreAttributeValues' => [  
  15.                     'deleted_at' => null  
  16.                 ],  
  17.                 'invokeDeleteEvents' => false // 不触发删除相关事件  
  18.             ],    
  19.         ];      
  20.     }      

 

控制器中使用:

PHP Code复制内容到剪贴板
  1. public function actionDelete($id)  
  2. {  
  3.     $this->findModel($id)->softDelete();  
  4.     return ResultHelper::json("success","删除成功");  
  5. }  

 

 

8、安装多项目管理模块后,当前model有实体字段project_id,会在project_index索引表中对于每条信息关联的项目,加入索引表,便于后期根据项目查询信息

PHP Code复制内容到剪贴板
  1. public function behaviors()  
  2. {  
  3.     return [  
  4.         [  
  5.             'class' => ProjectBehavior::className(),  
  6.             'attribute' => 'project_id'// 默认就是project_id  
  7.             'entity' => __CLASS__   // 定义为当前model,方便查询,不然API的model与backend的namespace不一致  
  8.         ],  
  9.     ];  
  10. }  

 

需要获取项目名称,项目详情,从model中获取:

$model->project

$model->projectName 

 

多项目管理模块2,多加了一个大类和小类的区分以及对应的搜索,这里的behaviour对应的需要改成:

PHP Code复制内容到剪贴板
  1. public function behaviors()  
  2. {  
  3.     return [  
  4.         [  
  5.             'class' => Project2Behavior::className(),  
  6.             'attribute' => 'project_id'// 默认就是project_id  
  7.             'entity' => __CLASS__   // 定义为当前model,方便查询,不然API的model与backend的namespace不一致  
  8.         ],  
  9.     ];  
  10. }  

用法与上面一致的 

 

 

 8、behavior记录

如果我在项目表,需要添加成员的关联表,那么我添加了一个behaviors在使用set魔术方法一直未进去时,如何解决?

(1)model的rules需要添加虚拟字段

(2)behaviors 设置的虚拟字段与form中是否一致

 

 

本文来自于:http://www.yoyo88.cn/note/yoyocmf/498.html

Powered by yoyo苏ICP备15045725号