簡體   English   中英

CakePhp-在不同的URL上拆分視圖和控制器

[英]CakePhp - Splitting Views and Controllers over different URLS

我有2個網站。 www.xxx.comwww.yyy.com

我在www.xxx.com上有一個CakePHP解決方案,它工作正常。

我現在要使網站www.yyy.com使用與www.xxx.com相同的控制器和數據庫。 但是它具有完全不同的CTP和CSS。 我當然可以將全部復制到www.yyy.com但是然后我需要維護2套代碼。 我只想維護2套不同的CTPS和CSS。

所以問題是:

  1. 您可以在2個不同的URL中拆分控制器和視圖嗎?
  2. 假設答案為1。 然后,您能否擁有使用相同控制器和數據庫但顯示完全不同的視圖和CSS的2個不同站點?
  3. 根據您的經驗,在進行此操作之前我應該​​考慮些什么?

謝謝。

您的問題與需要台式機和移動版本的網站非常相似。 您可以研究用於此的解決方案。

我們通過創建一個AppController來構建類似的東西,該AppController在beforeFilter()方法中設置了一個變量(在您的情況下檢查請求域),並在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()那樣使它正常工作;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM