Yii2 高级版本使用命令 php init
初始化项目以后会提供相似 main.php
和 main-local.php
来区分本地和 线上的开发环境变量配置。php
可是基础版没有提供此功能,那么下面咱们来使用 phpdotenv 来实现此功能。html
第一步先安装mysql
$ composer require vlucas/phpdotenv
而后添加 env.php
文件,能够放在根目录下git
<?php /** * Setup application environment */ $dotenv = new \Dotenv\Dotenv(dirname(__DIR__)); $dotenv->load(); defined('YII_DEBUG') or define('YII_DEBUG', getenv('YII_DEBUG') === 'true'); defined('YII_ENV') or define('YII_ENV', getenv('YII_ENV') ?: 'prod');
修改项目入口文件 /web/index.php
,修改以后的文件以下:github
<?php require(__DIR__ . '/../vendor/autoload.php'); // Environment require(__DIR__ . '/../env.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); $config = require(__DIR__ . '/../config/web.php'); is_file($file = __DIR__ . '/../config/web-local.php') and $config = array_merge($config, require $file); (new yii\web\Application($config))->run();
修改项目根目录下 yii
文件,修改以后的文件以下:web
#!/usr/bin/env php <?php /** * Yii console bootstrap file. * * [@link](/member/link) http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ require(__DIR__ . '/vendor/autoload.php'); // Environment require(__DIR__ . '/common/env.php'); require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); $config =require(__DIR__ . '/config/console.php'); $application = new yii\console\Application($config); $exitCode = $application->run(); exit($exitCode);
在项目根目录下新建一个文件 .env.dist
,里面就是环境配置信息,示例以下:sql
# Framework # --------- YII_DEBUG = true YII_ENV = dev # Databases # --------- DB_DSN = mysql:host=localhost;port=3306;dbname=yii2 DB_USERNAME = root DB_PASSWORD = root DB_TABLE_PREFIX = t_ ADMIN_EMAIL = admin@gmail.com ROBOT_EMAIL = robot@gmail.com
最后记得把.env
文件在 git 中设置成忽略,在 .gitignore
文件中添加下面代码:bootstrap
# Env /.env
复制环境变量配置文件api
cp env.dist .env
修改 .env
文件配置信息yii2
而后就能够用 getenv()
调用了,示例以下:
'db'=>[ 'class'=>'yii\db\Connection', 'dsn' => getenv('DB_DSN'), 'username' => getenv('DB_USERNAME'), 'password' => getenv('DB_PASSWORD'), 'tablePrefix' => getenv('DB_TABLE_PREFIX'), 'charset' => 'utf8', 'enableSchemaCache' => YII_ENV_PROD, ],
参考项目:https://github.com/trntv/yii2-starter-kit
共收到 6 条回复Yii2配置
这个项目我也看了,在琢磨怎么添加上rbac权限控制的UI界面,能够像adminLTE那样用界面管理角色和权限 有好方法推荐吗 @echo @forecho
@jason571 #1楼 你能够试一下这个 https://github.com/yiier/yii2-rbac
试了一下你说的yiier-rbac,居然连安装都失败了。。@forecho
[user@host advanced]$ php yii migrate --migrationPath=@yii/rbac/migrations/ Exception 'yii\base\UnknownPropertyException' with message 'Getting unknown property: yii\console\ErrorHandler::errorAction' in /var/www/html/advanced/vendor/yiisoft/yii2/base/Component.php:143 Stack trace: #0 /var/www/html/advanced/vendor/yiier/yii2-rbac/src/components/AccessControl.php(78): yii\base\Component->__get('errorAction') #1 /var/www/html/advanced/vendor/yiisoft/yii2/base/ActionFilter.php(67): yiier\rbac\components\AccessControl->isActive(Object(yii\base\InlineAction)) #2 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent)) #3 /var/www/html/advanced/vendor/yiisoft/yii2/base/Component.php(541): call_user_func(Array, Object(yii\base\ActionEvent)) #4 /var/www/html/advanced/vendor/yiisoft/yii2/base/Module.php(607): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent)) #5 /var/www/html/advanced/vendor/yiisoft/yii2/base/Controller.php(139): yii\base\Module->beforeAction(Object(yii\base\InlineAction)) #6 /var/www/html/advanced/vendor/yiisoft/yii2/console/Controller.php(91): yii\base\Controller->runAction('', Array) #7 /var/www/html/advanced/vendor/yiisoft/yii2/base/Module.php(455): yii\console\Controller->runAction('', Array) #8 /var/www/html/advanced/vendor/yiisoft/yii2/console/Application.php(167): yii\base\Module->runAction('migrate', Array) #9 /var/www/html/advanced/vendor/yiisoft/yii2/console/Application.php(143): yii\console\Application->runAction('migrate', Array) #10 /var/www/html/advanced/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request)) #11 /var/www/html/advanced/yii(27): yii\base\Application->run() #12 {main}
要先把配置中的as access注释掉才能yii migrate,建议在github项目的说明文档中作一个备注吧
[user@host advanced]$ cat common/config/main.php <?php return [ 'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', 'language' => 'zh-CN', 'components' => [ 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'authManager' => [ 'class' => 'yii\rbac\DbManager', ], ], 'modules' => [ 'rbac' => [ 'class' => 'yiier\rbac\Module', // 'allowNamespaces' => [ // 'yiier\rbac\controllers', // 'api\controllers', // 'api\modules\user\controllers', // ], // 'menus' => [ // 'users' => 'User' // ], // 'userClassName' => 'app\models\User', // 'idField' => 'id', // 'usernameField' => 'shop_name', ], ], /* 'as access' => [ 'class' => 'yiier\rbac\components\AccessControl', ], */ ];
@forecho 我如今仅仅搭了个Yii2 Advanced模板app目录为advanced,要体验yii2-rbac的话,请问文档中提到的下面这段代码应该放到哪一个文件中合适? 我尝试放到/var/www/html/advanced/backend/views/layouts/main.php中,发现没什么效果
也不知道经过哪一个URL才能访问到yii2-rbac对应的功能,谢谢。
use menu echo Menu::widget( [ 'options' => [ 'class' => 'sidebar-menu' ], 'items' => [ [ 'label' => Yii::t('app', 'Dashboard'), 'url' => Yii::$app->homeUrl, 'icon' => 'fa-dashboard', 'active' => Yii::$app->request->url === Yii::$app->homeUrl ], \Yii::$app->getModule('rbac')->getInstance()->getItems() // add menu ] ] );
@jason571 #5楼 use menu 是说使用菜单。部分代码能够参照这个 https://github.com/iiYii/yii2-adminlte/blob/master/backend/views/layouts/main.php#L30