2

首先,让我解释一下我的情况:我有两个域,两个网站,相同的布局,但不同的内容和不同的目的。我想做的事:

在这两个系统之间共享:

  • 功能、布局模板和管理。

有什么不同吗:

  • 视图中的页面,一些控制器。

我考虑的选项:

选项1

  1. 使两个站点之一成为插件
  2. 检查主机名:$_SERVER['HTTP_HOST'],并在核心或引导程序中指明是否应使用插件。

像这样的东西:

if ($_SERVER['HTTP_HOST'] == 'www.example1.com') {
    Configure::write('defaultplugin', 'example1');
} else {
    Configure::write('defaultplugin', null);
}

这可能吗

选项 2

一个虚拟地址,但这也很难实现,因为我的路由是这样配置的:

Router::connect("/{$prefix}/:language/:plugin", $indexParams, $shortParams);

也许我应该将这条路线更改为:

Router::connect("/{$prefix}/:plugin/:language", $indexParams, $shortParams);

但是,如果我之前的建议可行,我愿意这样做,因为我不知道最后一个解决方案是否能在某些层面上正常工作。

选项 3

使用此处描述的方法:http ://rickguyer.com/cakephp-one-core-many-apps/

所以我会创建 3 个应用程序文件夹:example1、example2、common。但我不知道是否可以让 app 文件夹包含 example1 和 common 或 example2 和 common 的内容。

选项 4

Stackoverflow 上有人提出了一个很棒的想法。

提前致谢!

4

1 回答 1

0

我们根据域切换 routes.php 内容。这样我们就拥有了所有的灵活性,而不必做太多的配置/黑客/切换。

您只需切换/替换相关路线,其余的应该没问题。

例如:

if ($isDomainX) {
    Router::connect('/', array('plugin' => 'shop', 'controller' => 'shop', 'action' => 'index', 'slug' => $slug), array('pass' => array('slug')));
    ...
} else {
     Router::connect('/', array('controller' => 'custom_pages', 'action' => 'homepage'));
    ...
}

您还可以包含/切换整个文件,如果这样更容易阅读/维护。

于 2013-01-10T10:41:58.293 回答