创建Module


Module的创建及在Module中连接Model

创建Module

在项目根目录下的modules文件夹中创建web文件夹, 在web文件夹下创建 ApiModule.php 类, 代码如下:

namespace modules\web;

use Cross\MVC\Module;

class ApiModule extends Module
{
    function __construct()
	{
    	parent::__construct();
	}
}

先根据模块的命名规则, 指定类的命名空间:

namespace modules\web;

然后使自定义的ModuleCross\MVC\Module中继承. 到此就完成了Module的创建, 并初始化了默认的Model

使用Module中的Model

创建好Module后, 就可以通过Module的类成员属性$link来使用Model了

namespace modules\web;

use Cross\MVC\Module;

class ApiModule extends Module
{
    function __construct()
	{
    	parent::__construct();
	}

	function test()
	{
		print_r($this->link);
	}
}

我们在module中添加了一个方法, 在方法中调用$this->link来使用默认Model, 使用方法见相关章节

创建指定Model的实例

Cross\MVC\Module的构造函数, 接收一个参数用于指定数据库连接类型和名称, 格式如下:

Model类型:配置名称

这里的参数通过数据库配置文件定义, 没定义会抛出一个异常

namespace modules\web;

use Cross\MVC\Module;

class ApiModule extends Module
{
    function __construct()
	{
    	parent::__construct('mysql:log');
	}
}

此时类的成员属性$link就是一个连接到log数据库的mysqlModel实例.

连接多种数据库

在Module中, 可以方便的创建与其他Model的连接, 只需要调用getModel方法

$this->getModel('Model类型:配置名称');

下面的例子在构造函数中连接了redis:

namespace modules\web;

use Cross\MVC\Module;
use Redis;

class ApiModule extends Module
{

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

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

获取当前的数据库连接类型

调用Cross\MVC\Module中的getLinkType()可以获取当前的数据库连接类型

$this->getLinkType()

获取当前的数据库连接详细配置

调用Cross\MVC\Module中的getLinkConfig()可以获取当前连接的详细配置

$this->getLinkConfig()

获取带前缀的表名

如果在数据库配置中指定了表前缀, 调用此方法可以获取带前缀的表名

$this->getPrefix(表名)

>仅在手写SQL语句时, 需要手动调用此方法获取带前缀的表名