【问题标题】:CakePHP multi-site file system organization with shared functions具有共享功能的 CakePHP 多站点文件系统组织
【发布时间】:2012-11-04 12:48:45
【问题描述】:

我在服务器中有一个 CakePHP 1.3 多站点安装。每个站点都有自己的文件夹,它们都从同一个地方加载 CakePHP 核心库。看起来是这样的:

  • [cake](cake 的核心库)
  • [网站]
    • [站点 1]
      • [应用]
      • [插件]
      • [供应商]
      • .htaccess
      • index.php
    • [site 2] (也有自己的应用程序、插件和供应商文件夹)
    • [site 3] (也有自己的应用程序、插件和供应商文件夹)

我发现自己很多时候都想实现一些我想在所有应用程序中使用的功能,但到目前为止我只是在每个站点中复制代码。我希望能够在一个地方声明这些函数并能够从任何站点调用它们。我相信供应商可能与此有关,但我一直在查看食谱,但不知道如何在我的情况下使用它。

任何帮助将不胜感激!

更新

所以通过查看供应商,在我看来(也许我错了)如果这些供应商文件中的函数不需要直接与其他 CakePHP 类(例如 Session ,身份验证等)。我将举一个我正在尝试做的事情的示例,也许这有助于更好地理解我正在尝试的内容。

每个网站都有自己的登录系统(使用 cake 的 Auth)。我想做的一件事是,当用户登录时(调用 UsersController 中的 login() 函数),有一个函数对用户的用户名进行一些处理,然后调用 Session ->flash() 函数在其中插入一条消息(消息根据函数进行的处理而变化)。所以这个函数需要用到User模型和Session模型。

我可以使用供应商来做到这一点,所以我在供应商中声明了这个函数(即 processLogin()),并且所有站点都可以使用该函数吗?如果是这样,怎么做?如果没有,有没有其他方法可以做到这一点?

【问题讨论】:

    标签: cakephp vendors


    【解决方案1】:

    将它们粘贴在 cakesites 同一级别的 vendor 文件夹中,以您选择的名称(通常机构名称或其他唯一标识符)。

    Cookbook 中解释了在 CakePHP 1.3 中加载供应商文件的示例:http://book.cakephp.org/1.3/en/view/943/Loading-Vendor-Files

    不过,我建议升级到 CakePHP 2,并将您的代码放在 lib 下的子文件夹中。

    【讨论】:

    • 第二个。随着升级,您可以考虑编写一个支持所有这些的应用程序,并且主要通过数据库或可堆叠插件来填充和维护;)
    • 谢谢你们的回复。问题是现在有 20 个站点,而且它们都是实时的,因此重新编写所有站点将花费很长时间。这仍然是我计划在未来做的事情,但现在我没有时间去做。我还更新了我的问题,因为通过查看 vendors 的东西可能不是我需要的,请阅读 UPDATE 部分。再次感谢!
    • 升级时,您可以将 CakePHP 2.0 代码放在路径中的另一个文件夹中,然后逐个更新站点,将 CAKE_CORE_INCLUDE_PATH 常量设置为使用 cake2 文件夹或您在升级时/升级期间调用的任何内容。
    • @MartinBean 可以升级,但与此同时,是否可以在 Cake 1.3 中做我想做的事情?
    • 不确定;自从我使用 1.3 以来已经有一段时间了。我想你想创建一个你的应用程序可以共享的 Auth 插件,而不是跨应用程序复制代码。记住:干燥。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多