Yii2 高级版本使用命令 php init
初始化项目之后会提供类似 main.php
和 main-local.php
来区分本地和
线上的开发环境变量配置。
但是基础版没有提供此功能,那么下面我们来使用 phpdotenv 来实现此功能。
第一步先安装
$ composer require vlucas/phpdotenv ^2.2
然后添加 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
本文由 forecho 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。
这个项目我也看了,在琢磨怎么添加上rbac权限控制的UI界面,可以像adminLTE那样用界面管理角色和权限 有好方法推荐吗 @echo @forecho
试了一下你说的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
针对最新版 phpdotenv 要这样使用:
修改 web.php 文件:之后代码如下:
<?php
require __DIR__ . '/../vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__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');
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
$config = require __DIR__ . '/../config/web.php';
(new yii\web\Application($config))->run();
其他不变