作者Yoper的csdn博客地址:http://blog.csdn.net/chenyoper
作者Yoper的博客園地址:http://www.cnblogs.com/Yoperchen/
本文《yii2 增加邏輯層》地址:http://www.cnblogs.com/Yoperchen/p/5934136.html
現在的框架基本是mvc模式了,比如thinkphp,ci,yii框架等等
由於項目做大,邏輯復雜之后,簡單的mvc模式已經不能滿足需求,總有那么幾個model在不斷的變大膨脹,這些model之間產生了網狀的相互依賴關系。維護起來比較麻煩。
於是我們就需要把這個或者這些膨脹了的model解耦出來。
於是我們考慮增加一個邏輯層Logic.
首先,我們有一個已經安裝好的yii項目。沒有安裝的可以參考我之前寫的yii2 高級模版安裝
安裝完成之后
主要有以下幾個目錄
backend
common
console
frontend
vedor
我們在comom目錄下新增一個文件夾logic,形成common\logic\ 這樣的目錄結構。
我們要讓他形成這樣的調用controller->logic->model,controller不再直接調用model,由logic去調用model.
假設我們有一個ArticleController.php,一個ArticleLogic.php,一個模型Article.php
顧名思義。
控制器層ArticleController.php
1 <?php 2 namespace frontend\controllers; 3 4 use Yii; 5 use yii\base\InvalidParamException; 6 use yii\web\BadRequestHttpException; 7 use yii\web\Controller; 8 9 use common\logic\ArticleLogic; 10 11 12 /** 13 * article controller 14 */ 15 class ArticleController extends Controller 16 { 17 /** 18 * http://yii_advanced_app_2_0_9.me/index.php?r=article/get_article_info&article_id=30 19 * 獲取信息 20 */ 21 public function actionGet_article_info() 22 { 23 $condition['id']=Yii::$app->request->get('article_id'); 24 25 $article_logic=new \common\logic\ArticleLogic(); 26 $get_article_info_result=$article_logic->get_article_info($condition); 27 28 print_r($get_article_info_result);die(); 29 30 } 31 }
邏輯層ArticleLogic.php
<?php /** * 文章 * @author Yoper 944975166@qq.com * http://www.linglingtang.com * */ namespace common\logic; use Yii; /** * article Logic */ class ArticleLogic extends YoxbaseLogic { private $article_model=null; public function __construct() { parent::__construct(); $this->article_model=new \common\models\Article(); } /** * 獲取文章信息 * @param array $condition * @return multitype:number unknown */ public function get_article_info($condition) { $result = array('status'=>0); $get_article_info_result = $this->article_model->get_article_info($condition); if($get_article_info_result['status']<1) { $result['message']=$get_article_info_result['message']; return $result; } $result['status']=1; $result['data']=$get_article_info_result['data']; return $result; } }
模型層Article.php
<?php /** * 文章 * @author Yoper 944975166@qq.com * http://www.linglingtang.com * */ namespace common\models; use Yii; use yii\base\NotSupportedException; use yii\behaviors\TimestampBehavior; use yii\db\ActiveRecord; /** * Article model * */ class Article extends ActiveRecord { /** * @inheritdoc */ public static function tableName() { return '{{%article}}'; } /** * @inheritdoc */ public function behaviors() { return [ TimestampBehavior::className(), ]; } /** * @inheritdoc */ public function rules() { return [ ['status', 'default', 'value' => self::STATUS_ACTIVE], ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]], ]; } public function get_article_info($condition) { $result = array('status'=>0); $info=$this->find()->where($condition)->one()->attributes; $result['status']=1; $result['message']='獲取成功'; $result['data']=$info; return $result; } }
這樣,我們就可以成功調用數據了。
如圖,簡單的打印,丑,但是有內涵~
增加邏輯層大功告成。
Yoper
2016.10.06