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