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