我正在创建一个 CakePHP 2.3 高级安装(几个应用程序-网站-共享一个相同的lib文件夹,所有蛋糕的核心文件都位于该文件夹中)。这没有任何问题,我只需在每个应用程序的 Config 文件夹中编辑core.php文件,这样它就知道在哪里可以找到蛋糕的文件。文件系统看起来像:
[root]
[cake-core-files]
[websites]
[website-1]
[app]
[plugins]
[vendors]
[website-2]
...
[website-N]
这些不同的应用程序实际上在某些方面是不同的(它们是不同的网站),但同时它们也有许多共同点(例如某些模型、控制器、功能......)。如果可能的话,我想做的是让这些应用程序也共享一堆控制器、模型等,这样我就可以把它们放在一个地方,而不是现在为每个应用程序复制它们。
我已经在 CakePHP 中看到了供应商和插件的概念(我实际上在这些网站中使用插件,但是来自 /app/plugins 文件夹),但我不确定这是否适用于我的情况,或者我将如何设置到了。我想这个想法是在 [cake-core-files] 和 [websites] 的同一级别上拥有另一个文件夹(例如 [shared_objects]),但我不知道如何配置 cake 来做到这一点或如何从每个应用程序调用这些对象。
有任何想法吗?
编辑
根据下面的评论/回复,我正在尝试使用 bootstrap.php 中的 App:build() 函数来执行此操作,但我无法让它工作。这就是我所做的:
添加了一个新文件夹,我想在其中放置要在所有应用程序之间共享的内容:
[root] [cake-core-files] [shared-stuff] --> NEW FOLDER [Model] [Config] [websites] [website-1] etc...
将模型User.php放入新文件夹[shared-stuff/Model]
在引导程序中添加了这一行:
App::build(array('Model' => array('/path/to/shared-stuff/Model')));
从其原始位置删除模型User.php [website-1/app/Model]
完成此步骤后,似乎可以正常工作,从[shared-stuff]文件夹中正确加载了模型 User.php (我已经测试了打印App::objects('Model');,列出了 User 模型)。但是,它实际上不起作用,当我在 login() 函数中从UsersController调用该模型时,登录不起作用(尽管我没有收到任何类型的错误,即使将调试设置为 2)。
此模型使用与默认配置不同的数据库配置(用户表位于与默认配置不同的数据库中)。我不知道这是否重要。
有一件事是肯定的,如果我将相同的 User.php 模型留在其原始位置([website-1/app/Model])它一切正常,包括登录,所以这是我如何尝试配置的问题所有这些共享的东西,而不是模型本身。
任何想法我做错了什么?