请教一下高级模板中environments的使用

问题咨询 · dionyang · 于 6年前 发布 · 2025 次阅读

群主您好。我注意到项目里使用了yii2.0高级模板。里面有配置。(在environments文件夹)但我看了高级模板的文档之后,还是不太明白怎么生效的。所以想请教一下。非常感谢。

共收到 2 条回复
Fecmall#16年前 0 个赞

在fecshop安装的时候,使用文档: http://www.fecshop.com/doc/fecshop-guide/develop/cn-1.0/guide-fecshop-about-hand-install.html#2

cd fecshop   
./init

会执行./init

打开init文件你会看到

if (!extension_loaded('openssl')) {
    die('The OpenSSL PHP extension is required by Yii2.');
}

$params = getParams();
$root = str_replace('\\', '/', __DIR__);
$envs = require("$root/environments/index.php");
$envNames = array_keys($envs);
...

/environments/index.php

这个文件里面就是要复制的文件的配置,里面的 Development 是开发环境的文件,Production是生产环境的文件,也就是把这个配置数组里面的文件,按照逻辑复制到相应的app入口下面,详细看代码,一点一点的捋。

在执行./init命令的时候,会让你输入prod 还是develop(用数字1,2标示),如果是prod,复制的就是Development的文件,如果是develop,复制的就是Production的文件。

Fecmall#26年前 0 个赞

另外,在文件 /environments/index.php中,你会注意到这里配置

'setCookieValidationKey' => [
            'appadmin/config/main-local.php',
            'appapi/config/main-local.php',
            'appfront/config/main-local.php',
            'apphtml5/config/main-local.php',
            'appserver/config/main-local.php',
        ]

打开 appfront/config/main-local.php,你会发现如下:

<?php

$config = [
	'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'FoOwzm-NS4xrnCPaCEhUP0QYOmnAdHjL',
        ],
		'redis' => [
            'database' => '3',
        ],
    ],
];

执行init 命令,会设置这里 cookieValidationKey的值,这样任何人安装yii2,他们的 cookieValidationKey,是不相同的,这样cookie也肯定不一样,增强安全性。

这个操作的代码,是在init文件里面可以找到下面的代码:


function setCookieValidationKey($root, $paths)
{
    foreach ($paths as $file) {
        echo "   generate cookie validation key in $file\n";
        $file = $root . '/' . $file;
        $length = 32;
        $bytes = openssl_random_pseudo_bytes($length);
        $key = strtr(substr(base64_encode($bytes), 0, $length), '+/=', '_-.');
        $content = preg_replace('/(("|\')cookieValidationKey("|\')\s*=>\s*)(""|\'\')/', "\\1'$key'", file_get_contents($file));
        file_put_contents($file, $content);
    }
}

就是这个函数生成cookiekey然后保存到相应文件里面的

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics