欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Yii2 模块 自定义模块目录

程序员文章站 2024-01-11 13:49:34
...
请教一下各位,yii2的模块创建后(比如如下的forum模块),官方的标准是如下目录结构。
请问可以在该模块下手动创建一个目录么?比如common目录,如果可以的话调用该目录里的类文件与Yii1.1中的components一样么?
现在想把该模块通用的类放到该目录,就像YII1.1中的components目录一样,多谢了
forum/
    Module.php                   模块类文件
    controllers/                 包含控制器类文件
        DefaultController.php    default 控制器类文件
    models/                      包含模型类文件
    views/                       包含控制器视图文件和布局文件
        layouts/                 包含布局文件
        default/                 包含DefaultController控制器视图文件
            index.php            index视图文件

回复内容:

请教一下各位,yii2的模块创建后(比如如下的forum模块),官方的标准是如下目录结构。
请问可以在该模块下手动创建一个目录么?比如common目录,如果可以的话调用该目录里的类文件与Yii1.1中的components一样么?
现在想把该模块通用的类放到该目录,就像YII1.1中的components目录一样,多谢了

forum/
    Module.php                   模块类文件
    controllers/                 包含控制器类文件
        DefaultController.php    default 控制器类文件
    models/                      包含模型类文件
    views/                       包含控制器视图文件和布局文件
        layouts/                 包含布局文件
        default/                 包含DefaultController控制器视图文件
            index.php            index视图文件

没什么经验,不过从你列出的默认结构来看直接创建目录应该是无法自动加载的,需要添加一些设置,类似 namespace => 'Common', path => 'forum/common',具体怎么做参考一下models或者controllers的配置就行了。

这种相当于加组件类,主要是把自己添加的类路径和参数, 在config目录中的main.php进行配置,这样的就可以自动加载,可以仿照db配置connection时的样子 :
(主要应该是自定义class的路径 例如可以是forumcommonutil。对应util类的命名空间可以是namespace forumcommon)

[
    'components' => [
        // 使用类名注册 "cache" 组件
        'cache' => 'yii\caching\ApcCache',

        // 使用配置数组注册 "db" 组件
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=demo',
            'username' => 'root',
            'password' => '',
        ],

        // 使用函数注册"search" 组件
        'search' => function () {
            return new app\components\SolrService;
        },
    ],
]

多谢各位。
发现可以通过命名空间解决这一个问题。
比如新建一个test目录,然后统一为该目录下所有的类文件设置一个命名空间。

相关标签: php yii2