0

我正在创建一个 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() 函数来执行此操作,但我无法让它工作。这就是我所做的:

  1. 添加了一个新文件夹,我想在其中放置要在所有应用程序之间共享的内容:

    [root] [cake-core-files] [shared-stuff] --> NEW FOLDER [Model] [Config] [websites] [website-1] etc...

  2. 将模型User.php放入新文件夹[shared-stuff/Model]

  3. 在引导程序中添加了这一行:

    App::build(array('Model' => array('/path/to/shared-stuff/Model')));
    
  4. 从其原始位置删除模型User.php [website-1/app/Model]

完成此步骤后,似乎可以正常工作,从[shared-stuff]文件夹中正确加载了模型 User.php (我已经测试了打印App::objects('Model');,列出了 User 模型)。但是,它实际上不起作用,当我在 login() 函数中从UsersController调用该模型时,登录不起作用(尽管我没有收到任何类型的错误,即使将调试设置为 2)。

此模型使用与默认配置不同的数据库配置(用户表位于与默认配置不同的数据库中)。我不知道这是否重要。

有一件事是肯定的,如果我将相同的 User.php 模型留在其原始位置([website-1/app/Model])它一切正常,包括登录,所以这是我如何尝试配置的问题所有这些共享的东西,而不是模型本身。

任何想法我做错了什么?

4

2 回答 2

3

我认为在多个网站之间共享一些控制器/模型可能很有用,并且无需插件即可:使用共享控制器/模型可以让您在需要时覆盖它。只需将控制器/模型复制到网站的正确文件夹中,系统就应该使用它而不是共享的!

编辑:太好了,它有效,但我认为蛋糕的官方文档中有一点错误:所有路径都应该以目录分隔符终止!在 cakephp 书中没有斜线。将它添加到您的 App::build 路径中,一切都会完美运行!

于 2013-02-03T20:35:39.467 回答
0

您可以在核心 Plugins/ 目录中有插件

[root]
    [lib]
        [Cake]
    [Plugins]
        [Available]
        [To]
        [All]
    [website-1] // the 'app' dir -> https://github.com/cakephp/cakephp/tree/master/app
        [plugins]
        [vendors]
    [website-2] // you can have many of them named anything, 'app' is just one.
        ...
    [website-N]

文件夹专门使插件可用于使用 cake 库的任何应用程序

例如:

看看这个。复制appwebsite-1,重复直到website-n

于 2013-01-04T01:54:06.610 回答