Yii2 使用 .env 來配置項目環境變量

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

 2 個贊 踩 感謝 關注 收藏

共收到 6 條回覆Yii2配置

jason571#1•10個月前 0 個贊

這個項目我也看了,在琢磨怎麼添加上rbac權限控制的UI界面,能夠像adminLTE那樣用界面管理角色和權限 有好方法推薦嗎 @echo @forecho

forecho#2•10個月前 0 個贊

@jason571 #1樓 你能夠試一下這個 https://github.com/yiier/yii2-rbac

jason571#3•10個月前 0 個贊

試了一下你說的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}

jason571#4•10個月前 1 個贊

要先把配置中的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

jason571#5•10個月前 0 個贊

@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
        ]
    ]
);

forecho#6•10個月前 0 個贊

@jason571 #5樓 use menu 是說使用菜單。部分代碼能夠參照這個 https://github.com/iiYii/yii2-adminlte/blob/master/backend/views/layouts/main.php#L30

相關文章
相關標籤/搜索