Php 我还没有将yii2配置为mysql,为什么它要尝试连接到mysql?

Php 我还没有将yii2配置为mysql,为什么它要尝试连接到mysql?,php,sqlite,yii,yii2,Php,Sqlite,Yii,Yii2,这就是我所做的: 我下载了yii2高级模板 运行php init 在中配置了每个main-local.php文件 环境/dev/common/config 环境/prod/common/config 公共/配置 我在“组件”中添加了以下内容 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'sqlite:/path/to/sqlitedbs/yayr.sq3', 'username' =>

这就是我所做的:

  • 我下载了yii2高级模板
  • 运行php init
  • 在中配置了每个main-local.php文件
    • 环境/dev/common/config
    • 环境/prod/common/config
    • 公共/配置
我在“组件”中添加了以下内容

'db' => [
    'class' => 'yii\db\Connection',
    'dsn' => 'sqlite:/path/to/sqlitedbs/yayr.sq3',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
],
我按照自述文件中的说明配置了apache vHost

运行
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
可以看到完整的堆栈跟踪:

我使用IDE搜索mysql dsn存在的每个位置。唯一的位置是
/tests/codeception/config/config.php
,不应该通过提交表单来调用它。为了再次检查,我注释掉了配置,但没有任何帮助

我还尝试在配置中设置
'driverName'=>'sqlite',
,但没有任何区别。也没有注释掉用户名、密码或字符集参数

堆栈跟踪引用的函数似乎都没有手动调用MySQL。他们都在寻找配置好的dsn

那么,为什么我认为它甚至可以尝试连接到MySQL?ActiveRecord不是把所有的SQL都抽象出来,这样我使用的是MySQL还是sqlite就无关紧要了吗

我如何克服这个问题?使用sqlite将使初始开发更加容易


谢谢

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


它将为应用程序创建工作表

Yii2高级模板的基础

  • 您拥有包含实际配置文件的environments文件夹
  • 前端和后端文件夹保存这些“本地”文件的副本,具体取决于您选择的环境,它们是从dev或prod复制的
那是什么意思?如果对Environments文件夹中的任何文件执行更改,则必须重新初始化应用程序。只需打开控制台,导航到应用程序的基本文件夹并调用
init
-命令即可。然后,系统会询问您需要哪种环境以及要覆盖哪些文件

之后,您应该会看到您的更改反映在前端和后端文件夹中。这背后的思想是防止配置文件中的if/else结构,并使应用程序干净。顺便说一句:web文件夹中的
index.php
以相同的方式复制。这样,您甚至可以自定义它……因此也可以自定义应用程序最初加载的方式

回到你的问题上来

对我来说,您似乎更改了
环境/../local-…
-configfile中的设置,这是正确的…但随后没有重新初始化应用程序。这样,前端和后端中的配置文件仍然包含您的旧设置

高级模板的文档化

这里的所有内容都有很好的记录:


你在<代码>Yii::$app->db->driverName中看到了什么?嗯,我试图将这些信息记录下来,但无法运行syslog函数。我认为存在某种缓存,但据我所知,我已将其关闭,并且没有运行时/缓存目录。不管怎样,我搜索了整个项目,没有设置driverName。如果有帮助的话,关键是我没有使用mysql。完全配置mysql数据库并不能解决我的问题,这是错误的。您应该只更改environments文件夹中的*-本地文件。否则,您将无法达到高级模板的目的,您的更改将在下次执行init命令时被覆盖。