群主您好。我注意到项目里使用了yii2.0高级模板。里面有配置。(在environments文件夹)但我看了高级模板的文档之后,还是不太明白怎么生效的。所以想请教一下。非常感谢。
在fecshop安装的时候,使用文档: http://www.fecshop.com/doc/fecshop-guide/develop/cn-1.0/guide-fecshop-about-hand-install.html#2
cd fecshop ./init
会执行./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入口下面,详细看代码,一点一点的捋。
Development
Production
在执行./init命令的时候,会让你输入prod 还是develop(用数字1,2标示),如果是prod,复制的就是Development的文件,如果是develop,复制的就是Production的文件。
另外,在文件 /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,你会发现如下:
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也肯定不一样,增强安全性。
cookieValidationKey
这个操作的代码,是在init文件里面可以找到下面的代码:
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然后保存到相应文件里面的