2011-07-22 58 views
7

首先,由於這是我第一次在這裏發佈問題,我需要更多的時間來適應這個問題,因此對本文引起的任何方便感到抱歉。CodeIgniter和HMVC問題

Q1。我想創建2 「主控制器」 爲前端後端這樣的:

  • MY_Controller延伸是CI_Controller
  • 前端延伸MY_Controller和所有前端控制器將延長FrontEnd
  • 後端延伸MY_Controller和所有後端控制器將延伸後端

用HMVC(MX)做這件事的最好方法是什麼?

感謝@韋斯利默奇給出的想法把MY_Controller,前端,後端到MY_Controller.php 3個類的想法,但我認爲把每個類放在一個PHP文件更好(更清潔)。或者我錯了?我想創造這樣的結構:

  • ./core/MY_Controller.php(擴展MX_Controller)
  • ./libraries/Backend.php(擴展MY_Controller)
  • ./libraries/Frontend。 PHP(延伸MY_Controller)
  • 自動負載後端前端autoload.php
  • 所有前端控制器將延伸前端(如:class Blog extends Frontend
  • 所有後端控制器將延伸後端(如:class Admin extends Backend

將在不把的一行代碼在後端/前端控制器include_once該工作require_once./libraries/Backend.php./libraries/Backend.php


Q2。如何用HMVC實現多個主題? 例如,在MVC中,我們可以有2個主題strutured這樣的:

  • ./application/views/ THEME1 /view_files.php
  • 。/應用/視圖/ THEME2 /view_files.php

但在HMVC,視圖文件夾內的文件夾分開,如果我想要實現多個主題,通常我必須這樣做:

  • ./application/modules/ 模塊1 /視圖/ THEME1 /view_files.php
  • ./application/modules/ 模塊1 /視圖/ 主題2 /view_files.php
  • ./application/modules/ 模塊2 /視圖/ THEME1 /view_files.php
  • ./application/modules/ 模塊2 /視圖/ THEME2 /view_files.php

這不是我想要的,因爲我想提出一個主題的所有視圖文件放到一個文件夾以後,如果我想創建一個新的主題,我將只需要複製一個主題文件夾。但是我想知道如何在不破壞HMVC模型的情況下做到這一點(因爲據我所知,在HMVC模型中,模型,視圖,控制器必須位於一個模塊文件夾中 - 至少在CI中)。這是我陷入困境的衝突。

回答

9

只需打開或創建core/MY_Controller.php,創建一個類MY_Controller並將其擴展MX_Controller,然後在同一個文件中創建其他基本控制器,讓他們延長MY_Controller。這裏是你開始你可以複製/粘貼來得到一個例子:

<?php defined('BASEPATH') OR exit('No direct script access.'); 

class MY_Controller extends MX_Controller { 

    public function __construct() 
    { 
     // do some stuff here that affects all controllers 
    } 

} 

class Frontend_Controller extends MY_Controller { 

    public function __construct() 
    { 
     parent::__construct(); 
    } 

} 

class Backend_Controller extends MY_Controller { 

    public function __construct() 
    { 
     parent::__construct(); 
     // Check admin login, etc. 
    } 

} 

/* end file application/core/MY_Controller.php */ 

至於「多個主題」走了,不知道你需要什麼。樣式表? HTML模板?你需要讓用戶切換它們還是手動進行切換?你需要檢測移動設備並相應地改變主題嗎?上述所有的? 「最好」的方式將取決於你的實施。

我想創建2個庫擴展自MY_Controller.php 並自動加載它們。這會工作嗎?

不知道爲什麼你需要或想要......只是不這樣做。您應該只使用其他控制器擴展這些類。

關於主題,我想有 多個主題的看法,如: - /views/theme1/view_files.php - /views/theme2/view_files.php關於JS/CSS /圖像,我可以安排 我自己。一開始我會修復主題,但後來我可能會允許 用戶選擇。使用MVC,我可以把主題放在/ views /上面的 以上,但與HMVC,我必須找到另一種方式來安排它們到 主題,因爲視圖文件夾是分開的(我想要所有查看文件 相同的主題將是隻有1個文件夾)..

由於這是過於寬泛的一個問題在這裏解決,而你似乎不具備甚至試圖做任何事,我會給你一個最低限度例如:

class MY_Controller extends MX_Controller { 

    public function __construct() 
    { 
     // do some stuff here that affects all controllers 
     $this->theme = 'theme1'; // matches your directory name in /views/themes/ 
    } 

} 

從你的控制器:

$this->load->view('themes/'.$this->theme.'/my_view_file'); 

使用HMVC,該文件看上去永遠是對當前模塊中,然後回落到默認的應用程序的目錄,如果它不存在。如果由於某種原因你需要明確的話,你可以說前面加上了模塊名稱的路徑(就像在模塊之間交叉加載資源一樣)。例如:

// From "blog" module 
$this->load->view('events/index'); 
// We just loaded `modules/events/views/index` from the blog module 

不管怎麼說,這不是一個完整的解決方案,但希望它能讓你開始一個想法。現在有成千上萬的方法可以做到這一點,這裏有兩個已經支持主題模板庫:

+0

感謝韋斯利,我沒有嘗試,但應該工作。 –

+0

我想創建2個庫從MY_Controller.php擴展並自動加載它們。這會工作嗎? 關於主題,我想有多個主題的看法,如: - ** /視圖/ THEME1/view_files.php ** - ** /視圖/ THEME2/view_files.php ** 關於JS/CSS /圖像,我可以安排自己。 一開始我會修復主題,但後來我可能會允許用戶選擇。使用MVC,我可以將主題放在**/views/**的子文件夾中,但是使用HMVC,我必須找到另一種方式將它們安排到主題中,因爲視圖文件夾是分開的(我希望所有查看相同主題的文件都將只有一個文件夾).. –

+0

對不起,我忘了提及在1個文件中創建2個類,我想創建2個庫Backend和Frontend從MY_Controller擴展並在配置文件中自動加載後端和前端。然後在控制器中,我將擴展爲:'class Blog extends Frontend' –