1

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

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

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

4

1 回答 1

1

是的,有。首先,永远不要在Webroot/index.php. 事实上,你根本不应该接触这个文件。您可以在 中定义变量 Config/bootstrap.php

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

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

于 2012-07-16T21:42:18.510 回答