CakePHP 无法从插件中的 shell 中找到数据库配置


CakePHP cannot find database configuration from shell in plugin

背景:基本上,我的应用程序有一个插件,里面有一个Shell。 此命令行管理程序位于插件的控制台>命令文件夹中。 此 shell 中的函数旨在从命令行运行。

我的数据库配置文件(数据库.php)位于应用程序的根 Config 文件夹中。 我在其他几个实例中访问数据库,因此我知道数据库配置没有任何问题。

当我尝试使用任何模型数据检索方法(例如find(...))时,出现错误:

在数据库中找不到数据源配置"默认.php

发生这种情况是因为它正在插件的 Config 文件夹中查找数据库.php文件,而不是根 Config 文件夹。 这仅在使用命令行管理程序时发生,而不是在控制器中发生。

我的问题:使用 Shell 时,如何告诉我的插件使用根数据库.php文件,而不是尝试在它自己的 Config 文件夹中找到它?

重申一下:插件在从控制器中的模型中检索数据时使用根配置/数据库.php文件,但在从 shell 中的模型检索数据时尝试使用自己的配置/数据库.php文件。

我尝试过的两件事会起作用:1)将数据库.php移动到插件的 Config 文件夹中,然后 2) 创建符号链接。

这两种解决方案似乎都是不可接受的,因为我不想有两个数据库.php文件的副本,并且创建符号链接不是一个很好的解决方案,因为此应用程序可能必须分布在不同的系统之间。

谢谢。 我应该提到这是Cakephp 2.3.6

答案(感谢user221931):您的工作路径必须是应用程序路径,而不是插件路径。 您可以使用插件点表示法运行插件 shell。 喜欢这个:

cake -app /path/to/app Plugin.shellName shellFunction

与我之前错误的做法相反:

cake -app /path/to/app/Plugin/pluginName shellName shellFunction

使用 -app 运行插件 shell 怎么样?

更改路径: 您的工作路径应与应用程序路径相同。要更改路径,请使用"-app"参数。 示例:-app relative/path/to/myapp 或 -app/absolute/path/to/myapp