根据主机名CakePHP设置默认插件

时间:2013-01-10 09:00:09

标签: cakephp plugins

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

在这两个系统之间共享:

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

有什么不同:

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

我考虑的选项:

选项1

  1. 将两个网站中的一个设为插件
  2. 检查主机名:$ _SERVER ['HTTP_HOST'],并在核心或引导程序中指明是否应该使用该插件。
  3. 这样的事情:

    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个app文件夹:example1,example2,common。但我不知道是否可以让app文件夹包含example1和common OR example2以及common的内容。

    选项4

    来自Stackoverflow的人的一个很棒的想法。

    提前致谢!

1 个答案:

答案 0 :(得分:0)

我们根据域切换routes.php内容。 通过这种方式,我们可以灵活地进行配置/黑客/切换。

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

e.g:

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'));
    ...
}

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