文档章节

Yii2 使用 .env 来配置项目环境变量

 小田天
发布于 2016/11/17 11:27
字数 1078
阅读 1547
收藏 0

Yii2 高级版本使用命令 php init 初始化项目之后会提供类似 main.php 和 main-local.php 来区分本地和 线上的开发环境变量配置。

但是基础版没有提供此功能,那么下面我们来使用 phpdotenv 来实现此功能。

配置

第一步先安装

$ composer require vlucas/phpdotenv

然后添加 env.php 文件,可以放在根目录下

<?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 ,修改之后的文件如下:

<?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 文件,修改之后的文件如下:

#!/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,里面就是环境配置信息,示例如下:

# 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 文件中添加下面代码:

# Env
/.env

使用

复制环境变量配置文件

cp env.dist .env

修改 .env 文件配置信息

然后就可以用 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

本文转载自:https://getyii.com/topic/257

上一篇: Yii2之事件处理
下一篇: 编译安装PHP7
粉丝 1
博文 84
码字总数 49841
作品 0
怀化
私信 提问
linux下安装yii——遇到到问题和解决

由于PHP的很多高阶教材都是以LINUX作为基础,我也只好硬着头皮从WINDOWS转向LINUX,说实在的,这是个很痛苦到过程,从一个傻瓜 式到桌面系统转到一个繁琐到命令式系统,就像从移动电话时代回...

南国野兽
2012/11/24
4.9K
0
yii2开发中19条推荐实践(阿北总结)

虽然每个人的编程风格不同,但是有些建议能让你的代码更加规范和稳定,本次就我这次网站更新总结如下几点,希望对你的yii2学习和使用有所帮助。 环境说明 服务器环境: CentOS 开发环境及IDE...

阿北2017
2018/06/02
151
3
Yii basic 去掉index.php 后缀

安装 Yii 社区推荐:掘金是一个面向程序员的技术社区,从后端到架构,从 PHP 最佳实践到一线大厂经验分享,无论入门还是进阶,来掘金你不会错过后端开发的任何一个技术干货。 你可以通过两种...

全栈coder
2018/11/22
0
0
【翻译】Yii2 第1章 开始

让我们看看,怎样以最小的代价使用Yii2创建一个站点。目的是学习使用Yii2应用模版的安装过程,并开始体验模版里提供的一系列特性。 一个基本应用 开始使用Yii2最基本和直接的方式,是使用Yii...

zcgly
2015/09/15
967
7
Yii2.0.12升级到PHP7.2可用版本

先说一下Yii框架PHP运行环境的情况。 Yii2.0.12版本使用yiibaseObject类,Object作为类名PHP7.2报错。 PHP7.2的Yii2最小可用版本为2.0.13。 提供若干升级的方法。 项目使用Composer管理和前端...

dragon_tech
05/15
22
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
14
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部