• YII的Modules模块化


    转载来源:

    http://blog.csdn.net/mengxiangbaidu/article/details/7041296

    http://blog.csdn.net/colzer/article/details/8443042

    在YII中,程序入口是一个继承CApplication的CWebApplication的应用程序,在一个web请求的整个过程中,控制器,模型和视图都是由Application进行创建和控制。首先我们来看一下CWebApplication的类的继承结构:

    从上面我们可以看到CWebApplication本身也是一个CModue。在YII中,模块之间是一个树形结构。即每一个模块都可以包含多个子模块,每一个子模块可以继续包含子模块.其中APP为树的头节点,如图:

    对于一个具体请求,假设route=A/B/C/D,下面我们讲述一下,APP怎么选择相应的模块和模块中的控制器Controller和动作Action。具体的流程图如下:

     一个相对来说大的项目。如果按照yii生成的webapp进行开发。所有的controller放到controllers文件夹下,所有的model放到models文件夹下面,如果你有n多个controller和n多的model,是不是就显得这种组织结构过于繁琐,冗余了。还好YII支持Modules结构。你的项目可以分成n多的Module,然后每一个Module有自己的controllers和models。这样的组织结构,无论是开发,管理都方便简洁多了。看看YII的Modules的是组织方式和使用方法。

    │   ├── models
    │   │   ├── ContactForm.php
    │   │   ├── LoginForm.php
    │   │   └── User.php................................................................
    │   ├── modules模块的存放目录
    │   │   └── testmod一个模块,模块的名字对应是目录的名字,唯一。也是路由中的moduleid
    │   │       ├── components模块用到的组件
    │   │       ├── controllers包含控制器
    │   │       │   └── DefaultController.php默认控制器
    │   │       ├── messages国际化
    │   │       ├── models模型类文件
    │   │       ├── TestmodModule.php模块的类文件
    │   │       └── views试图文件
    │   │           ├── default默认视图
    │   │           │   ├── index.php视图文件
    │   │           └── layouts包含布局文件
    │   ├── runtime....................................................................
    │   │   └── application.log
    │   ├── tests
    │   │   ├── bootstrap.php
    │   │   ├── fixtures
    │   │   │   └── tbl_user.php

    模块的类文件:

    <?php
    
    class AdminModule extends CWebModule
    {
        public $defaultController = 'default';
        public $assetsUrl;  //样式目录
        public function init()
        {        
            // this method is called when the module is being created
            // you may place code here to customize the module or the application
    
            // import the module-level models and components
            $this->setImport(array(
                'application.extensions.*',
                'admin.models.*',
                'admin.components.*',
            ));
            
            //这里是用来区分前后台的session,为用户名session添加了一个admin
            Yii::app()->setComponents(array(
                'user' => array(
                    'stateKeyPrefix' => 'admin',
                    'loginUrl'=>Yii::app()->createUrl('/admin/default/login'),                                    
                ),
                'errorHandler'=>array(
                // use 'site/error' action to display errors
                    'errorAction'=>'/admin/default/error',
                ),
            )
            );
            //设定跳转url
            Yii::app()->user->setReturnUrl(Yii::app()->createUrl('admin'));
            
            //发布样式资源
            $this->assetsUrl = Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.admin.assets'));
        }
    
        public function beforeControllerAction($controller, $action)
        {
            if(parent::beforeControllerAction($controller, $action))
            {
                // this method is called before any module controller action is performed
                // you may place customized code here            
                return true;
            }
            else
                return false;
        }
        
        
    }

    config配置:

    'modules'=>array(
            // uncomment the following to enable the Gii tool
            
            'gii'=>array(
                'class'=>'system.gii.GiiModule',
                'password'=>'Enter Your Password Here',
                // If removed, Gii defaults to localhost only. Edit carefully to taste.
                'ipFilters'=>array('127.0.0.1','::1'),
            ),
            
            'admin'=>array(
                'class' => 'application.modules.admin.AdminModule'        
            )
            
        ),

    通过gii配置:

    新加模块访问地址为:http://website/index.php?r=admin

  • 相关阅读:
    C#创建ActiveX
    easy-ui 中的事件触发 (tree)
    程序目录
    微信公众平台开发
    Redis分片机制
    Redis主从切换
    Redis主从复制
    Redis持久化机制
    Redis缓存击穿、缓存穿透、缓存雪崩
    Redis与数据库数据一致性
  • 原文地址:https://www.cnblogs.com/dcb3688/p/4607966.html
Copyright © 2020-2023  润新知