• 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:  );
  • 相关阅读:
    SQL Server2016 AlwaysOn无域高可用
    Windows Server 2016 无域故障转移群集
    SQL Server高可用实现方案
    oracle11g RMAN catalog的基本使用
    Oracle_Windows server ORA-01031: insufficient privileges
    MySQL MGR 单主模式下master角色切换规则
    SQL Server AlwaysOn原理简介
    DB2创建视图并授权给其他用户
    Oracle数据库用户的密码过期问题处理
    访问GitLab的PostgreSQL数据库
  • 原文地址:https://www.cnblogs.com/BlankEye/p/2786324.html
Copyright © 2020-2023  润新知