yii中的模块看起来更像一个应用。主要区别是模块不能单独部署,必须存在于一个应用中。用户可以像访问普通应用控制器那样,访问模块中的控制器。
模块在一些大型应用中,非常有用,可以将应用划分为几个模块,每个模块可以单独维护。
紧接上篇文章《yii框架之hello world》,在modules文件夹下,建立hello文件夹。即在“模块(modules)”目录下,建立hello模块。如图示:
在hello模块中,下面的结构和普通的yii应用是一样的。,建立一个HelloModule.php文件,模块文件的类必须继承CWebModule的模块类。类的名称为:$id.“Module”,$id代表模块的ID。因为模块的名称为hello,所以这个文件名为:helloModule,内容如下:
HelloModule.php |
class HelloModule extends CWebModule {
}
?>
controllers/PostController.php的内容:
PostController.php |
class PostController extends CController {
public function actionWorld() {
$this ->render( "hw" , array ( "varYii" => "hi yii Module" ));
}
}
?>
可以看出,这里的写法和上篇文章的Controller写法是一模一样的。因为控制器Id是post,所以,我们在views下,建立post文件,建立一个hw.php的文件,为什么文件是是hw.php呢?因为$this->render("hw", array("varYii" => "hi yii Module")); 展示的内容是hw,所以要建一个hw.php的文件(注意路径)。如图示:
hw.php的内容如下:
hw.php |
echo $varYii;
?>
这里,还需要对appyii/protected/config/main.php进行修改,增加模块熟悉。main.php的内容如下:
main.php |
return array(
"modules" => array ( "hello" ,),
);
?>
另外,appyii/index.php的内容也要引入对main.php的应用。内容如下:
index.php |
require_once(dirname(__FILE__) . '../../yii-1.1.6/framework/yii.php');
$config = dirname(__FILE__) . '/protected/config/main.php';
Yii::createWebApplication($config)->run();
?>
-----------------------------------------------------
至此,配置结束。模块中的控制器动作通过 r=moduleID/controllerID/actionID进行访问。运行一下,看看结果。
--
另外,说明一下,如果一个控制器位于controller目录的子目录中,我们仍然可以通过上述的访问方式访问,例如,假设PostController位于hello/controllers/aa中,我们仍然可以通过 r=hello/aa/post/world 进行访问。但是需要注意,如果PostController.php的代码不做改动,要想访问到hw.php,需要对目录进行如下调整:modules/hello/views/aa/post/hw.php ,对比原来的目录:modules/hello/views/post/hw.php