为什么yii2在我没有配置到mysql时尝试连接到mysql?

时间:2014-11-26 23:32:13

标签: php sqlite yii yii2

这就是我所做的:

  • 我下载了yii2高级模板。
  • Ran php init。
  • 配置了每个main-local.php文件
    • 环境的/ dev /普通/配置
    • 环境/ PROD /普通/配置
    • 公共/配置

我在“组件”

中添加了以下内容
'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可以使初始开发更容易。

谢谢!

2 个答案:

答案 0 :(得分:4)

Yii2高级模板的基础知识

  • 您有包含实际配置文件的environment-folder
  • 前端和后端文件夹包含那些"本地" -files的副本,具体取决于您选择的环境,它们是从dev或prod复制的

现在是什么意思?如果对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

它将为应用程序创建表格