在多站点CakePHP 2.3安装中共享控制器,模型和视图

时间:2013-01-02 17:41:30

标签: cakephp-2.0 cakephp-2.3

我正在创建一个CakePHP 2.3高级安装(几个应用程序 - 网站 - 共享一个相同的 lib 文件夹,其中所有cake的核心文件都位于此处)。这没有任何问题,我只需编辑每个应用程序的Config文件夹中的 core.php 文件,以便知道在哪里可以找到蛋糕的文件。文件系统类似于:

[root]
    [cake-core-files]
    [websites]
        [website-1]
            [app]
            [plugins]
            [vendors]
        [website-2]
        ...
        [website-N]

这些不同的应用实际上在某些方面是不同的(它们是不同的网站),但同时有很多共同的东西(例如一些模型,控制器,功能......)。如果可能的话,我想做的是让这些应用程序共享一堆控制器,模型等,这样我就可以将它们放在一个地方,而不是现在为每个应用程序复制它们。

我在CakePHP中看到了供应商插件的概念(我实际上在这些网站中使用了插件,但是来自/ app / plugins文件夹),但我我不确定这是否适用于我的情况,或者我将如何设置它。我想这个想法是在[cake-core-files]和[网站]的同一级别有另一个文件夹(例如[shared_objects]),但我不知道如何配置蛋糕来做那个或如何从每个应用程序中调用这些对象。

有什么想法吗?

修改

根据下面的评论/回复,我试图使用bootstrap.php中的App:build()函数来做到这一点,但我无法让它工作。这就是我所做的:

  1. 添加了一个新文件夹,我想在所有应用之间分配内容:

    [根]     [蛋糕-core文件]     [shared-stuff] - >新建文件夹         [模型]         [配置]     [网站]        [网站-1]        等...

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

  3. 在bootstrap中添加了这一行:

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

  5. 删除模型 User.php

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

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

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

    任何想法我做错了什么?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

您可以在核心插件/目录

中安装插件
[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]

这个folder专门用于使用cake lib

的任何应用程序使用插件

EG:

看看this。将app复制到website-1,重复到website-n