🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> 模块是一个有自己的模型,视图,控制器以及其它模块的实体。这实际上是在应用程序内的应用程序。 [TOC] #### 第1步- 在你的项目根目录内创建一个 modules 文件夹。在 modules 文件夹内创建一个名为 admin 的文件夹。这是 admin 模块的基本文件夹。 #### 第2步 - 在 admin 文件夹里边,使用以下代码来创建 Admin.php 文件。 ~~~ <?php namespace app\modules\admin; class Admin extends \yii\base\Module { public function init() { parent::init(); } } ?> ~~~ 我们刚刚创建了一个模块类。它位于模块根路径下。每一次模块被访问时,将创建对应的模块类的一个实例。init()函数用于初始化模块的属性。 #### 第3步 - 现在,在 admin文件夹内添加两个目录- controllers 和 views。添加 CustomController.php 文件到控制器的文件夹中。 ~~~ <?php namespace app\modules\admin\controllers; use yii\web\Controller; class CustomController extends Controller { public function actionGreet() { return $this->render('greet'); } } ?> ~~~ 当创建一个模块,惯例是把控制器类到模块根路径的 controllers 目录。我们刚才定义的actionGreet函数,只返回一个 greet 视图。 在模块中视图应该放在模块基本路径的 views 文件夹中。如果视图是由控制器呈现,那么它们应位于对应于该控制器ID的文件夹中。将 custom 文件夹添加到 views 文件夹。 #### 第4步 - 在 custom 目录里创建一个名为 greet.php 文件并使用下面的代码。 ~~~ <h1>Hello,这是一个自定义模块!</h1> ~~~ 我们刚刚创建了 actionGreet 视图。要在模块中使用这个新创建文件,我们还应该配置应用程序。我们应该将模块添加到应用程序的模块属性中。 #### 第5步 - 修改 config/web.php 文件,如下。 ~~~ <?php $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is //required by cookie validation 'cookieValidationKey' => 'Yia-yiibai.com', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], 'errorHandler' => [ 'errorAction' => 'site/error', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'db' => require(__DIR__ . '/db.php'), ], 'modules' => [ 'admin' => [ 'class' => 'app\modules\admin\Admin', ], ], 'params' => $params, ]; if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [ 'class' => 'yii\debug\Module', ]; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', ]; } return $config; ?> ~~~ 模块的控制器路由必须使用模块ID开始,后面控制器ID和动作ID。 #### 第6步 - 如要在应用程序运行 actionGreet,应该使用下面的路由 ~~~ admin/custom/greet ~~~ 在这里,admin 就是一个模块ID,custom 是控制器ID和 greet 就是一个动作ID。 第7步- 现在,键入URL访问: http://localhost:8080/index.php?r=admin/custom/greet ,就会看到下面的输出结果了。 ![](https://box.kancloud.cn/1058c01b9cdfe10379863091d6f41f65_689x380.png) # 要点 模块(Modules)应该 − 在大型应用程序中。应划分其功能分成几个应用组。每个应用功能组可以作为一个模块开发。 可重复使用。一些常用的功能,如搜索引擎优化管理或博客的管理,可以开发成模块,这样在今后的项目中很容易地重用它们。