Modules系统简介


modules是项目的数据处理中心, module根据跟功能不同保存在modules下的不同目录

├─modules modules文件夹
│   ├─admin
│   ├─space
│   ├─user
│   ├─blog
│   ├─article
│   └─common

Module的命名空间及自动加载

Module是cp的一个模块, 他遵循模块命名空间的命名规则, 存放在modules/admin下的类文件的命名空间是:

namespace modules\admin;

同理modules/blog下的类的命名空间就是

namespace modules\blog;

只要在使用的类文件头部使用正确的命名空间就可以完成自动加载过程

为什么是Module

cp中MVC模式的M层指的是Module, 不是传统的Model, 传统的的Model在cp的Module中只是类的一个成员变量. 在实际开发中可能需要多个Model相互配合来完成某项工作, 一个实际项目中的Module可能是这样的:

namespace modules\web;

use Cross\MVC\Module;
use Redis;

class TestModule extends Module
{	
    /**
     * @var Redis
     */
    protected $cache;

    /**
     * @var Redis
     */
    protected $queue;

    function __construct()
    {
        parent::__construct();
        $this->cache = $this->getModel('redis:cache');
        $this->queue = $this->getModel('redis:queue');
    }
}

在这个Module的构造函数中, 我们连接了redis数据库并赋值给了成员变量cachequeue, 他们都是redis这个model的实例, 因为是从Cross\MVC\Module继承, 所以还包含一个父类的成员变量link, link是默认的mysql连接对象, link的连接参数是由数据库配置文件中的mysql:db指定的, 所以这个Module实际上是包含了两个Model, cp中的M层, 并不是Model, 他更像是管理数据的一个模块(Module).

支持的数据库

  • PDO驱动的MySQL, PgSQL, SQLite
  • Redis,
  • Memcache,
  • CouchBase,
  • MongoDB