背景:基本上,我的应用程序有一个插件,其中有一个 Shell。这个 Shell 位于插件的 Console > Command 文件夹中。此 shell 中的函数旨在从命令行运行。
我的数据库配置文件 (database.php) 位于应用程序的根 Config 文件夹中。我在其他几个实例中访问数据库,所以我知道数据库配置没有问题。
当我尝试使用任何模型数据检索方法(例如 find(...))时,我收到错误消息:
在 database.php 中找不到数据源配置“默认”
发生这种情况是因为它正在插件的 Config 文件夹中查找 database.php 文件,而不是根 Config 文件夹。这只发生在使用 Shell 时,而不是在控制器中。
我的问题:当使用 Shell 时,如何告诉我的插件使用 root 的 database.php 文件,而不是尝试在它自己的 Config 文件夹中找到它?
重申一下:插件在从 Controller 中的模型检索数据时使用根 Config/database.php 文件,但在从 Shell 中的模型检索数据时尝试使用其自己的 Config/database.php 文件。
我尝试过的两件事会起作用: 1)将 database.php 移动到插件的 Config 文件夹中,2)创建一个符号链接。
这两种解决方案似乎都不可接受,因为我不想有两个我的 database.php 文件的副本,并且创建符号链接不是一个很好的解决方案,因为这个应用程序可能必须分布在不同的系统之间。
谢谢。我应该提到这是 Cakephp 2.3.6
回答(感谢user221931):您的工作路径需要是应用程序路径,而不是插件路径。您可以使用插件点表示法运行插件外壳。像这样:
cake -app /path/to/app Plugin.shellName shellFunction
与我之前的错误做法相反:
cake -app /path/to/app/Plugin/pluginName shellName shellFunction