【问题标题】:CakePHP Shared core for multiple appsCakePHP 多个应用程序的共享核心
【发布时间】:2011-04-18 16:58:07
【问题描述】:

在我的本地设置中,我有很多不同的 CakePHP 网站。我使用的是 Mac,因此文件夹结构类似于 ~/Users/cameron/Sites/sample-website,然后在每个网站中,我将拥有典型的 Cake 文件夹和 App 文件夹。

我想要做的是只拥有一个核心蛋糕文件夹,然后让所有网站都从该蛋糕核心中提取,这样我就不会多次拥有相同的东西。我一直在网上看一些教程:http://rickguyer.com/cakephp-one-core-many-apps/

所以我在这里有我的蛋糕文件夹:~/Users/cameron/Sites/cake-1.3/,然后是我的网站:~/Users/cameron/Sites/sample-site/,在这个文件夹中,我有常用的 app 文件夹和 htaccess,告诉它在哪里可以找到 webroot 等。

现在我已经像教程一样编辑了 webroot 中的 index.php 文件,但只更改了一行,因为我没有像他那样将我的文件移到 App 文件夹之外。所以我唯一喜欢的改变如下:

if (!defined('CAKE_CORE_INCLUDE_PATH'))
{
    define('CAKE_CORE_INCLUDE_PATH', '..'.DS.'..'.DS.'cake-1.3');
}

据我所知,这是正确地查找两个目录并找到一个名为 cake-1.3 的文件夹,但它只会给出错误 500?

任何想法是什么问题?谢谢

编辑:

即使这样做也不行??? 如果我回显:echo CAKE_CORE_INCLUDE_PATH; 给出/Users/cameron/Sites/cake-1.3,如果我将其粘贴到地址栏中,它会加载蛋糕文件夹,所以它绝对是正确的文件夹结构,只是它不喜欢在主 url 之外查看蛋糕?

if (!defined('CAKE_CORE_INCLUDE_PATH'))
{
    define('CAKE_CORE_INCLUDE_PATH', DS.'Users'.DS.'cameron'.DS.'Sites'.DS.'cake-1.3'); echo CAKE_CORE_INCLUDE_PATH;
}

【问题讨论】:

  • 网站是否相关? (例如销售相同的产品、共享数据库等)为什么要将它们放在同一台服务器上?
  • @John Isaacks:共享的不是同一个 APP 代码,而是同一个 CakePHP 的核心框架。它可以避免在同一台服务器上拥有多个核心副本。那么当你要更新核心的时候,就可以就地更新了。

标签: php cakephp


【解决方案1】:

你的钱是对的:

define('CAKE_CORE_INCLUDE_PATH', DS.'Users'.DS.'cameron'.DS.'Sites'.DS.'cake-1.3');

只需确保用户位于根目录下。换句话说,当你进入终端时,你可以通过输入:cd /Users/cameron/Sites/cake-1.3

进入这个目录

看起来您可能在 MAC 上。如果是这样,您的链接是正确的。大多数情况下,我发现您已经完成了应用程序目录的复制粘贴,但它没有获取 .htaccess 文件。我会先检查那些。但这里是您应该验证的完整列表:

  1. 确保主机指向 正确的目录 (/Users/cameron/Sites/sample-site/)
  2. 验证 mod_rewrite 是否确实开启。
  3. 验证您已复制.htaccess 在两个文件中 /Users/cameron/Sites/sample-site//Users/cameron/Sites/sample-site/webroot 目录。
  4. 确认 /Users/cameron/Sites/cake-1.3/ directory 有一个名为的目录 蛋糕里面有核心。

一旦这一切都得到确认,你就如金了!

编码愉快!

更新: 当 index.php 文件查找 cake core 时,它​​会在您指向的位置内查找一个目录,以查找另一个名为 cake 的目录。所以在你的情况下:

define('CAKE_CORE_INCLUDE_PATH', DS.'Users'.DS.'cameron'.DS.'Sites'.DS.'cake-1.3');

/Users/cameron/Sites/cake-1.3 中必须有 cake 目录。您的目录结构将如下所示:

/Users/cameron/Sites/cake-1.3/cake
/Users/cameron/Sites/cake-1.3/cake/libs
/Users/cameron/Sites/cake-1.3/cake/config
/Users/cameron/Sites/cake-1.3/cake/console
etc.

CakePHP 3.0+ 在 CakePHP 3.0+ 中,这个配置从 webroot/index.php 移到 App/Config/paths.php

【讨论】:

  • 一切都是正确的,除了cake-1.3/ 不包含蛋糕文件夹!它是 cake 文件夹...改变它,所以他们的 IS a cake 文件夹确实解决了问题,但我希望 cake-1.3 成为蛋糕核心!
  • 没错。解压 cake 1.3 下载并将主目录名称更改为 cake-1.3。让一切保持机智。您将在其中看到应用程序、蛋糕、插件等文件夹。它仍将包含蛋糕核心,但必须通过 /your/directory/to/cake-1.3/cake 访问它。这有意义吗?
  • 如果看到 cake-1.3 下的 lib 文件夹,则需要将 cake-1.3 改回 cake,然后将其放入名为 cake-1.3 的文件夹中即可。
  • 如果我希望它被称为 Cake-1.3 而不仅仅是 Cake 怎么办?
  • 您可以将其命名为 cake-1.3... 但核心必须位于 cake 目录中。还有其他特定于核心的文件位于 cake 目录之外(即插件、供应商、应用程序)。因此,您仍然可以将文件夹命名为上一级,但您无法在不修改代码本身的情况下重命名 cake 文件夹。核心中的所有函数都查找cake 目录。但这很方便。当您想创建一个新站点时,您可以从 cake-1.3 中复制 app 目录并使用它在站点中创建另一个站点。它保持简单。
【解决方案2】:

如果你可以访问你的 php.ini,你可以在那里添加 Cake 核心的路径。这样做意味着您根本不必更改 webroot/index.php。 php.ini 中的示例:

include_path = ".:/usr/local/lib/php:/home/something/phpinc/cakephp2/lib"

根据CakePHP 2.x docs,这是共享Cake 核心的推荐方式(假设您可以访问您的php.ini)。

【讨论】:

    【解决方案3】:

    你只能有一个蛋糕核心,但你必须有一个应用程序文件夹(包含 MVC)每个站点。

    【讨论】:

    • 是的,我只有一个 Cake 核心文件夹,但它已从网站目录中移出,以便其他站点可以共享相同的核心。
    【解决方案4】:

    这是对CakePHP的文件夹结构的误解吗?

    来自文档 (CakePHP folder structure):

    • app 文件夹将是您发挥作用的地方您的魔法:这是您的应用程序文件将被放置的地方。
    • 蛋糕文件夹是我们发挥我们的魔法的地方。做出个人承诺,不编辑此文件夹中的文件。如果您修改了核心,我们将无法帮助您。

    因此,cake 文件夹不应在您的所有用途之间更改,因此您有 1 个副本。您始终可以通过在 app 文件夹中进行自己的更改(即扩展)来更改核心的某些功能。

    【讨论】:

    • 是的,我知道这一点。但是我想让几个应用程序都共享一个核心蛋糕文件夹,这样我就不必更新同一个核心的多个版本。
    • 我很抱歉。您可以将index.php 放入app 文件夹,但我想您需要更改配置文件中的文件路径。如何保持相同的结构,但使用 cake 目录的符号链接(或别名)指向您的单个代码库。
    • 是的,请查看更新的 OP,了解我更改的内容以查看蛋糕核心文件的新位置。但我仍然收到错误消息?
    【解决方案5】:

    无需编辑 index.php。

    只需在您的每个站点文件夹中为您的 cake 文件夹添加一个别名(或 UNIX 中的链接)。完美运行。插件和供应商文件夹也是如此。

    【讨论】:

    • 如果 .htaccess 文件是问题,则不会。 @Cameron 的做法是正确的。可能还有另一个问题(例如缺少 .htaccess 文件)。
    • 当然,如果 .htaccess 缺失,就会出现问题。尽管如此,我的解决方案正在运行,无需编辑 index.php。在我的所有网站中,我都有一个指向唯一且集中的蛋糕文件夹、插件文件夹和供应商文件夹的链接(或别名),如下所示:cake -> /Library/Cake/cake, plugins -> /Library/Cake/plugins跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多