CakePhp - 在不同的URL上拆分视图和控制器

时间:2013-04-17 10:00:40

标签: php cakephp

我有2个网站。 www.xxx.com& www.yyy.com

我在www.xxx.com上有一个CakePHP解决方案,它运行正常。

我现在想让网站www.yyy.com使用与www.xxx.com相同的控制器和数据库。但它是完全不同的CTP和CSS。我当然可以将整个副本复制到www.yyy.com但是我需要维护两组代码。我只想维护2套不同的CTPS和CSS。

所以问题是:

  1. 您可以跨两个不同的网址拆分控制器和视图吗?
  2. 假设1的答案是肯定的。那么你可以使用相同的控制器和数据库有2个不同的站点,但显示完全不同的视图和CSS?
  3. 在你从经验中做这件事之前我应该​​考虑什么?
  4. 感谢。

1 个答案:

答案 0 :(得分:0)

您的问题与需要桌面版和移动版的网站非常相似。您可以研究用于此的解决方案。

我们通过创建一个在beforeFilter()方法中设置变量的AppController来构建这样的东西(在你的情况下检查请求域),并在render方法中使用这个变量来选择要使用的布局和视图文件:

function render($action = null, $layout = null, $file = null) {                
    $view_file = false;
    $layout_file = false;

    // test for availability of layout does not work for null so set to default setting of null.
    if ($layout === null) {
        $layout = $this->layout;
    }

    // if not mobile: show desktop version.
    if (!$this->is_mobile) {
        $view_file = file_exists(VIEWS . $this -> name . DS . 'desktop/' . $file . '.ctp');
        $layout_file = file_exists(LAYOUTS . 'desktop/' . $layout . '.ctp');
    }

    return parent::render($action, ($layout_file ? 'desktop/' : '') . $layout, ($view_file ? 'desktop/' : '') . $file);
}

这样,如果is_mobile为false,则使用子目录“desktop”中的视图/布局而不是默认值。您可以使用相同的系统为2个域创建单独的视图/布局。

我们通过覆盖render()而不是使用有时也建议的afterFilter()来做到这一点。我忘记了真正的原因,但知道这是因为我们无法让它像我们想要使用afterFilter(); - )

相关问题