做者Yoper的csdn博客地址:http://blog.csdn.net/chenyoperphp
做者Yoper的博客園地址:http://www.cnblogs.com/Yoperchen/html
本文《yii2 增長邏輯層》地址:http://www.cnblogs.com/Yoperchen/p/5934136.htmlweb
如今的框架基本是mvc模式了,好比thinkphp,ci,yii框架等等thinkphp
因爲項目作大,邏輯複雜以後,簡單的mvc模式已經不能知足需求,總有那麼幾個model在不斷的變大膨脹,這些model之間產生了網狀的相互依賴關係。維護起來比較麻煩。yii2
因而咱們就須要把這個或者這些膨脹了的model解耦出來。mvc
因而咱們考慮增長一個邏輯層Logic.app
首先,咱們有一個已經安裝好的yii項目。沒有安裝的能夠參考我以前寫的yii2 高級模版安裝框架
安裝完成以後frontend
主要有如下幾個目錄yii
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