这就是我所做的:
我在“组件”
中添加了以下内容'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'sqlite:/path/to/sqlitedbs/yayr.sq3',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
我按照自述文件中的说明配置了apache vhosts。
运行yii migrate
在配置的位置创建了sqlite数据库文件,没有错误。
当我转到前端应用程序并尝试提交注册表单时,有什么突破,它给了我这个错误:
Exception
Database Exception – yii\db\Exception
SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
↵
Caused by: PDOException
SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
in /home/johnsmith/dev/test/yayr/vendor/yiisoft/yii2/db/Connection.php at line 579
可以看到完整的堆栈跟踪:http://pastebin.com/KEKH1zbM
我使用我的IDE搜索mysql dsn存在的每个位置。唯一的地方是/tests/codeception/config/config.php
,不应该通过提交表单来调用。为了仔细检查,我注释掉了配置,它没有帮助。
我也尝试在配置中设置'driverName' => 'sqlite',
,但这没有任何区别。也没有注释掉用户名,密码或字符集参数。
堆栈跟踪引用的所有函数似乎都不会手动调用MySQL。它们都寻找配置的dsn。
那么,为什么Yii认为它甚至可以尝试连接MySQL? ActiveRecord是否抽象出所有SQL,以便在使用MySQL或sqlite时无关紧要?
如何解决此问题?使用sqlite可以使初始开发更容易。
谢谢!
答案 0 :(得分:4)
Yii2高级模板的基础知识
现在是什么意思?如果对envirnments文件夹中的任何文件执行更改,则必须重新初始化应用程序。您只需打开控制台,导航到应用程序的基本文件夹并调用init
- 命令即可。然后,系统会询问您需要哪个环境以及要覆盖哪些文件。
之后,您应该会看到您的更改反映在前端和后端文件夹中。这背后的想法是防止配置文件中的if / else结构并具有干净的应用程序。顺便说一下:web文件夹中的index.php
以相同的方式被复制。这样你甚至可以自定义...以及最初加载应用程序的方式。
回到您的问题
对我来说,看起来你改变了environments/.../local-...
- configfile中的设置,这是正确的...但是没有重新启动应用程序。这样前端和后端的配置文件仍包含旧设置。
高级模板的记录
这里记录的一切都很好:
https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/README.md
答案 1 :(得分:-2)
init 命令后
创建一个新数据库并将其添加到 common / config / main-local.php
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=your-db',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
在控制台命令中应用 yii migrate !
它将为应用程序创建表格