CakePhp2定义了CAKE_CORE_INCLUDE_PATH,现在在ShellDispatcher中未定义DS和CORE_PATH

时间:2012-07-15 19:20:22

标签: shell cakephp console cakephp-2.2

为了在许多站点之间共享CakePhp2核心,我在webroot / index.php中编辑了CAKE_CORE_INCLUDE_PATH以指向cake目录。这有效,我可以到达我的欢迎页面。

但是,当我尝试运行Cake Console时,我遇到了ShellDispatcher.php没有定义DS和CORE_PATH的问题,因为只有在未定义CAKE_CORE_INCLUDE_PATH时才会定义它们。一旦我从if语句中定义它们来检查CAKE_CORE_INCLUDE_PATH是否未定义,我就很高兴。但是,我不想“破解”这个文件,因为我想保持蛋糕核心文件的清洁。有没有更好更清洁的选择?

我还必须定义CAKE_CORE_INCLUDE_PATH并使用它在Console / cake.php中设置$ dispatcher,这当然是app的一部分。

1 个答案:

答案 0 :(得分:1)

是的。作为开始,永远不要在Webroot/index.php中定义应用程序范围的变量。事实上,你根本不应该触摸这个文件。您可以在中定义变量 Config/bootstrap.php

您收到错误是因为在Shell中你根本没有触发Webroot/index.php - 你实际上正在运行PHP's CLI并且CakePHP以不同的方式触发。 它当然会通过bootstrap.php文件。

您还应该使用此文件来定义任何全局变量,但是存在一些瓶颈 这里使用PHP's $_SERVER variable's网络服务器相关成员时 - 例如HTTP_HOST和定义:$myHost = $_SERVER['HTTP_HOST'];。如果你启动一个shell,Cake会尝试设置这个变量,它会失败而抛出一个错误。这是因为如前所述,当使用CakeShell时,PHP将以CLI模式运行。有一种方法可以检测到这一点 - 您可以在bootstrap.php中使用$ _SERVER ['SCRIPT_FILENAME']或$ _SERVER ['SCRIPT_NAME']来确定您是否在CLI中。 :)