代码改变世界

Yiiframework框架之模块

2011-09-10 00:23  开源天宝  阅读(3218)  评论(1编辑  收藏  举报

模块是一个独立的单元,包含视图、控制器和其它组件,它和一个应用的区别是不能单独部署。

创建模块

首先,模块目录放在你的应用的modules目录中,我们可以使用yii自带的gii生成器来创建基本的结构,开启gii的方法是修改你的应用config/main.php文件中如下内容

	'modules'=>array(
		'gii'=>array(
			'class'=>'system.gii.GiiModule',
			'password'=>'你的密码访问时需要输入',
		 	// If removed, Gii defaults to localhost only. Edit carefully to taste.
			'ipFilters'=>array('127.0.0.1','::1'),
		),
	),

  下面通过 你的应用/index.php?r=gii 访问gii,打开以后选择,左边菜单的Module Generator选项。你将会看到下面的画面

在Module ID 输入模块的名称,我这里输入admin,然后点击Preview按钮。如下图所示,它向你展示了所有将会被生成的文件,允许你在新建之前预览他们 :

然后点击Generate按钮,来生成所有文件。因为Web服务器进程需要写入权限,所以确保你的/protected文件夹对于该应用程序是可写入的。

配置使用这个模块

我们对主配置文件 : protected/config/main.php进行配置,如下的代码需要被修改,添加了'admin', :

'modules'=>array( 
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'你的密码',
)
,
'admin',
)
,

  保存上面的修改后后,我们的新admin模块已经可以使用了。我们可以先通过以下地址访问一下index.php?r=admin/default/index

在模块中使用layout

我们访问index.php?r=admin/default/index会发现,模块使用了你的应用下的/protected/views/layouts/main.php文件,而我们可能希望使用/protected/modules/admin/views/layouts/main.php文件,让admin模块拥有独立的布局视图。

我们在protected\modules\admin\controllers\DefaultController.php添加如下代码,

public $layout='application.modules.admin.views.layouts.main'; 

  我们把从/protected/views/layouts/main.php 拷贝到/protected/modules/admin/views/layouts/,稍作修改,这样模块就拥有了独立的布局视图.

 在模块中使用Assets

添加新的模块时,一般会包含图像文件,CSS文件,JavaScript文件等。

模块可以直接从网站主目录中引用。但是如果想要创建一个模块能够在任何地方引用,并且能够避免命名冲突,就要用到assets了。

过程是(这里模块名是admin):

1、把需要用到的资源放在modules/admin/assets下。

2、然后通过 CAssetManager,Yii::app()->assetManager能够自动的将私有资源publish到公共目录下 网站目录/assets

3、Yii会自动在网站目录的/assets下创建一个随机不冲突的文件夹,如2b31b42b,并把你的modules/admin/assets目录下的文件拷贝过去。

例如我的模块是Admin,文件路径通过如下代码获得,修改protected\modules\admin\AdminModule.php文件,

class AdminModule extends CWebModule
{

/*开始*/
private$_assetsUrl;

publicfunction getAssetsUrl()
{
if($this->_assetsUrl===null)
$this->_assetsUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.admin.assets'));
return$this->_assetsUrl;
}

publicfunction setAssetsUrl($value)
{
$this->_assetsUrl=$value;
}

/*结束*/

}

然后,在/protected/modules/admin/views/layouts/main.php中

使用$this->module->assetsUrl就可以调用你的css等文件了。

代码如下,

<link rel="stylesheet" type="text/css" href="<?php echo $this->module->assetsUrl; ?>/css/screen.css" media="screen, projection" />

  4,通过如上操作,该模块只要把admin目录拷贝,就可以多次复用了。