ThinkPHP Logic层


ThinkPHP的LIB目录下默认有Action,Behavor,Widget三个文件夹,Behavor与Widget没有用到就没有也了解,Action层可以看做是对用户行为的一种抽象,比如用户想登陆、注册、加关注、翻译单词都会被抽象为Action层的某个方法,在具体的实践中发现有这样一个问题,有时候用户的行为需要多个Action联合才能完成,ThinkPHP提供了一个R方法来完成跨Action调用,使用这个方法中似乎会导致用户URL改变,于是就萌生了Action层中再增加一层Logic层,来解决跨Action的逻辑问题,Logic层的核心职责是需要分散的多个Action联合才能完成任务聚合在一起,比如用户的某个行为需要多个Action分别去处理数据库的多张表,但现在转发给Logic层,由Logic去处理这些表。有了Logic层,就有一个好处不必在需要跨Action就能使用另一个Action提供的功能了,因为每一个Action提供的功能实际上是由Logic层去完成,只要准备好Logic层方法需要的参数,不管参数是从web里get或者post过来,还是直接代码里填写都无所谓了。

FollowerLogic.class.php实现的的用户相互关注,

   1:  <?php
   2:   
   3:  class FollowerLogic {
   4:      
   5:      protected $follower_model = null;
   6:      protected $user_model = null;
   7:   
   8:      public function __construct() {
   9:          
  10:          $this->follower_model = D('Follower');
  11:          $this->user_model = D('User');
  12:      }
  13:      
  14:      public function AddPublicFollower($uid, $follower_ids) {
  15:          // TODO 现在虽然是很想支持数组的操作,但现在这个接口有问题,
  16:          // 只在应用层一个一个的加/删
  17:          if (is_array($follower_ids)) {
  18:              // TODO 这个分支暂时不会走到
  19:              // 加入自己的观察列表
  20:              ..
  21:              
  22:          } else {
  23:              
  24:              // 加入自己的观察列表
  25:              ...
  26:          }
  27:      }
  28:      
  29:      public function DeletePublicFollwer($uid, $follower_ids) {
  30:          
  31:          if (is_array($follower_ids)) {
  32:              
  33:              // 反射删除自己的观察列表
  34:              ...
  35:              
  36:          } else {
  37:              
  38:              // 反射删除自己的观察列表
  39:              ...
  40:          }
  41:      }
  42:      
  43:      // 
  44:      public function AddQuietFollower($uid, $follower_ids) {
  45:          
  46:      }
  47:      
  48:      public function DeleteQuietFollower($uid, $follower_ids) {
  49:          // TODO 
  50:          
  51:      }
  52:   
  53:      // TODO 这里会按照策略来
  54:      public function GetFollowers() {
  55:          $data = $this->user_model->field('_id')->select();
  56:          return $data;
  57:      }
  58:  }

user_model与follower_model映射的两张表,根据不同的表设计,加关注系统的实现都是不一样的,这时不同的Action均可调用FollowrLogic提供的方法实现加关注,而不必是一个特定的URL了。

为了让ThinkPHP自动加载这个php脚本,需要在Conf目录下alias.php加上下面这一行代码,

   1:  <?php
   2:  return array(
   3:                  ....
   4:      'FollowerLogic' => LIB_PATH.'Logic/FollowerLogic.class.php',
   5:      ...
   6:  );


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM