禾匠小程序商城安装脚本解析
前言
没什么好说的,买的源码,yii2 框架,是禾匠科技开发的。从根目录的 version.json 文件内容 {"version": "2.9.35"}
了解了版本信息。禾匠科技官网上有两个版本,一个授权版,一个是开源版。授权版好处是可以得到支持和更新,但开户的小程序数量有限制,会收费;开源版可以一次性给到核心版源码(当然也是要收费的),后续开发需要自己解决,禾匠不会提供更新版本。对比各种信息,买的应该是开源版,版本有点低,官网上显示的已经到 4.0 版本了。
安装过程中出现的问题
- 项目根目录设置
在设置虚拟主机时,需要配置根目录。yii2 框架的根目录一般设置为项目目录下的 web 文件夹,这里做了一个适配,在项目目录下有一入口文件,具体内容如下:
<?php
if (file_exists(__DIR__ . '/install.lock.php')) {
header('Location: web/');
} else {
header('Location: web/install.php');
}
也就是说,不管是否已经安装过数据库,都跳转到 web 目录下。
- 未定义的
renderJSON
方法
填写完数据库相关的一些配置后,选择提交,然后就报了这错。
不确定是否是 yii2 框架内携带的方法,全局查找了一下,没有找到定义的位置。但在 README.md 中有意外发现:
在 Controller 中,可直接返回数组,以输出 JSON 数据:
return ['code' => $code, ...];
...
切勿在输出响应时使用废弃的json_encode
和renderJson
方法,将会引发app\hejiang\exceptions\InvaildResponseException
。
那应该就是自定义的方法了,版本更迭,原来调用这个方法处理返回数据,现在直接返回数组,就可以。
改成直接返回 return $res;
后再次提交表单,又报错了,还是这个位置 →_→ 。
按照提示去找原因,调试经过层层调用,最后返回的错误信息大概意思是 “你不能将数组作为返回内容”。得了,肯定是内部没有处理返回的数组。尝试用 json_encode
处理结果,表单提交成功。
- 数据库链接失败,请检查数据库信息是否正确
检查了一遍,数据库连接没有问题。想到大部分安装类的脚本好像都没有去创建数据库(可能没有操作权限,或者怕存在重复数据库,造成数据库覆盖,原有数据丢失),数据库本身需要用户自己手动创建。
手动创建一下即可。
.env
文件配置问题
.env
文件由 .env.example
文件复制而来,已经被添加到了 git 的忽视列表中,所以比较适合配置不同环境下的系统参数。
我这边在安装成功后,访问后台页面却出现空白页面,返回值为空。大部分情况下,这因为数据库连接参数问题导致的。复制来的 .env
文件内容(数据库相关的)如下:
...
## 数据库模式(可选值 "stand-alone" / "we7")
DB_MODE="we7"
## 数据库 DSN
DB_DSN="null"
## 数据库用户名
DB_USER="root"
## 数据库密码
DB_PASS=""
## 表名前缀
DB_PREFIX="hjmall_"
...
可以看到,DB_MODE
模式有两个选项,这两者都不太懂什么意思,也不知道具体有什么区别。yii2 框架 web 应用配置文件 config\web.php
中显示,配置数据库的文件为 config/db.php
,查看该文件:
<?php
function handle_old_db_config() // before 2018.5.27
{
$ind_db_file = __DIR__ . '/ind_db.php';
if (file_exists($ind_db_file)) {
return include $ind_db_file;
} else {
return select_db_config('we7');
}
}
function select_db_config($mode)
{
switch ($mode) {
case 'stand-alone':
return include __DIR__ . '/db-stand-alone.php';
case 'we7':
return include __DIR__ . '/db-we7.php';
case null:
return handle_old_db_config();
default:
throw new Exception('Unknown app mode.');
}
}
$db_config = select_db_config(
env('DB_MODE')
);
$db_config['enableSchemaCache'] = env('ENABLE_SCHEMA_CACHE', false);
$db_config['schemaCacheDuration'] = env('SCHEMA_CACHE_DURATION', 3600);
$db_config['schemaCache'] = env('SCHEMA_CACHE', 'cache');
$db_config['on afterOpen'] = function ($event) {
$event->sender->createCommand(
"SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'"
)->execute();
};
return $db_config;
从代码来看,禾匠定义的数据库模式应该是三种:stand-alone
、we7
和空。三种模式分别引入不同的数据库配置文件,空模式是对旧版本的支持。但从这个版本的安装脚本来看,安装配置写入到了 config/ind_db.php
文件中,也就是说默认为空模式。该文件也在 git 忽视列表中。所以,在选择配置 .env
文件时,DB_MODE
设置空字符串即可。
在寻找 stand-alone
和 we7
模式的信息时,看到一则帖子对于 stand-alone
模式的配置(.env
文件):
DB_MODE="stand-alone"
DB_DSN="mysql:host=localhost;port=3306;dbname=数据库名"
DB_USER="数据库用户名"
DB_PASS="数据库密码"
DB_PREFIX="hjmallind_"
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。