yii 模块

1. 创建模块

模块组织在一个目录中,目录的名字即模块的唯一 ID 。模块目录的结构跟应用基础目录很相似,一般放到protected/modules/[module name]目录下。下面列出了一个 fourm 的模块的典型的目录结构:


forum/  

   ForumModule.php            模块类文件  

   components/                包含可复用的用户组件  

      views/                  包含小物件的视图文件  

   controllers/               包含控制器类文件  

      DefaultController.php   默认的控制器类文件  

   extensions/                包含第三方扩展  

   models/                    包含模块类文件  

   views/                     包含控制器视图和布局文件  

      layouts/                包含布局文件  

      default/                包含 DefaultController 的视图文件  

         index.php            首页视图文件

模块必须有一个继承自 CWebModule 的模块类。类的名字通过表达式 ucfirst($id).'Module' 确定, 其中的 $id 代表模块的 ID (或者说模块的目录名字)。模块类是存储模块代码间可共享信息的中心位置。


我们可以使用 yiic 工具来创建一个新模块的框架。例如,要创建上面的 forum 模块,我们可以在命令行窗口中执行下面的命令:

>cd WebRoot/testdrive  e:/yii/framework/yiic shell
Yii Interactive Tool v1.0  
Please type ’help’ for help. Type ’exit’ to quit. 
>> module forum 

2. 使用模块

要使用模块,首先将模块目录放在 应用基础目录 的 modules 中。然后在应用的 modules 属性中声明模块 ID 。例如,为了使用上面的 forum 模块,我们可以使用如下 应用配置:

return array( 
    'modules'=>array('forum',...), 
); 

或者

return array( 
    'modules'=> array( 
        'forum' => arrary( 
            'class'=>'application.modules.forum.ForumModule'), 
        ... 
     ), 
); 


这样就可以通过url: moduleID/controllerID 来访问modules里的页面了。

对于前面用yiic产生的forum module,试试url: http://..../forum/default(后面也有叙述) 

模块也可以在配置时带有初始属性值。做法和配置 应用组件 很类似。例如, forum 模块可以在其模块类中有一个名为 postPerPage 的属性,它可以在 应用配置 中配置如下:

return array(  
    ......  
    'modules'=>array(  
        'forum'=>array(  
            'postPerPage'=>20,  
        ),  
    ),  
    ......  
);  

模块的实例可通过当前活动控制器的 module 属性访问。在模块实例中,我们可以访问在模块级中共享的信息。
例如,为访问上面的 postPerPage 信息,我们可使用如下表达式:

$postPerPage=Yii::app()->controller->module->postPerPage;  

// or the following if $this refers to the controller instance  

// $postPerPage=$this->module->postPerPage; 

模块中的控制器动作可以通过 路由 moduleID/controllerID/actionID 访问。例如,假设上面的 forum 模块有一个名为 PostController 的控制器,我们就可以通过 路由 forum/post/create 访问此控制器中的 create 动作。此路由对应的 URL 即 http://www.example.com/index.php?r=forum/post/create. 
    提示: 如果一个控制器位于 controllers 目录的子目录中,我们仍然可以使用上述 路由 格式。 例如,假设 PostController 位于 forum/controllers/admin 中,我们可以通过 forum/admin/post/create 访问 create 动作。


3. 嵌套的模块

模块可以无限级嵌套。这就是说,一个模块可以包含另一个模块,而这另一个模块又可以包含其他模块。我们称前者为 父模块 ,后者为 子模块. 子模块必须定义在其父模块的 modules 属性中,就像我们前面在应用配置中定义模块一样。 
要访问子模块中的控制器动作,我们应使用路由 parentModuleID/childModuleID/controllerID/actionID.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值