yii2 增加逻辑层

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii2 增加逻辑层相关的知识,希望对你有一定的参考价值。

 现在的框架基本是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 [email protected]
 * 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 [email protected]
 * 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

零零糖

 

以上是关于yii2 增加逻辑层的主要内容,如果未能解决你的问题,请参考以下文章

Yii2片段缓存详解

[YII2] 视图层过滤客户恶意代码

yii2 支付宝支付教程 [ 2.0 版本 ]

查看发票组代码后的总结和有感

如何使用yii2的缓存依赖特性

第九章 硬件抽象层:HAL