为了在许多站点之间共享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的一部分。
答案 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中。 :)