2012-03-24 95 views
5

我嘗試一些從該評論中的想法Code Igniter Controller/Model name conflicts笨控制器和模型具有相同名稱的科裏森

發現的類名變量核心/ CodeIgniter.php:

$class = $RTR->fetch_class();,改變這樣的:
$class = 'Controller' . $RTR->fetch_class();

現在更改控制器名稱:

class ControllerUser extends CI_Controller { ...

它的工作原理,現在我可以使用用戶模型和用戶控制器。但我的問題是,它有道理嗎?或者是否存在問題? (對不起,我的英文不好)

+0

這就是爲什麼你應該嘗試找到一個框架,它可以讓你使用PHP5.3 [namespaces](http://php.net/manual/en/language.namespaces.php)。就像我討厭這個框架一樣,FuelPHP可能是你合乎邏輯的一步。它非常新的CI叉。那當然,如果你能控制使用哪個框架,或者你處於可能的階段。如果不是,請在下一個項目中繼續考慮。 – 2012-03-24 09:23:13

+0

不知道你從FuelPHP得到的想法是CI的一個分支。它不是,從零開始建立,與CI沒有任何共同之處,並且不兼容。 – WanWizard 2013-03-26 12:15:30

回答

5

爲了解決這個問題,通常大多數人的「_model」後綴添加到模型中的類名

我認爲這是更好的後綴添加到控制器代替,因爲他們幾乎從來不會被類引用代碼中的名稱。

首先我們需要擴展Router類。

創建這個文件:「應用程序/庫/ MY_Router.php」

class MY_Router extends CI_Router { 
    var $suffix = '_controller'; 

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

    function set_class($class) { 
     $this->class = $class . $this->suffix; 
    } 

    function controller_name() { 

     if (strstr($this->class, $this->suffix)) { 
      return str_replace($this->suffix, '', $this->class); 
     } 
     else { 
      return $this->class; 
     } 

    } 
} 

現在編輯「系統/笨/ CodeIgniter.php」

行153:

if (! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->controller_name().EXT)) 

線158:

include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->controller_name().EXT); 

接下來,編輯:「系統/庫/ Profiler.php」,行323:

$output .= " 
<div style="color:#995300;font-weight:normal;padding:4px 0 4px 0">".$this->CI->router->controller_name()."/".$this->CI->router->fetch_method()."</div>"; 

Source

+0

的屬性不起作用。 404找不到。 – musa 2012-03-24 01:57:44

+0

@musa,這是與hmvc解決方案,請檢查我的編輯並更新 – Starx 2012-03-24 03:19:02

+0

不應該是'parent :: __ construct()'?自PHP5以來,您的構建方式發生了變化...然後CI仍然是半php4框架。 – 2012-03-24 09:19:37

1

是的,這使得sence。 Codeigniter是一個嚴格的面向對象的框架。這意味着,如果有兩個或多個具有相同名稱的對象,則該對象的名稱不夠獨特。

在你的情況下,模型是一個數據處理器和一個控制器,它把你的視圖和模型連接起來。因此,邏輯上,你必須命名它是這樣的:

你的模式將是: 「Model_User」, 「DB_USER」 或 「UserList的」

你的控制器將是: 「用戶」,Controller_User或UserController的

在模型的情況下,我建議你使用Db_User(簡短但明確的名字),並在控制器的情況下,我建議你使用「用戶」(簡稱和該類定義用戶,當它與用戶的模型和視圖相結合)

我從來沒有像使用我的Codeigniter系統這樣的問題

+0

我沒有使用複數,因爲我正在談論一個列表或表格。例如,用戶嚴格使用列表 – 2012-03-24 17:32:47

7

我不會修改笨的核心。當你升級時,你會放棄這個改變。

過去我做了兩件事: 1.將我的模型命名爲User_model 2.將我的控制器命名爲複數,並將我的模型命名爲單數。

我現在做後者。這在語義上也是有意義的,因爲控制器名稱在URL中,所以路徑看起來像app_path/users/username。此外,該模型通常模擬單個用戶,因此也是有意義的。

您也可以按照這個問題在這裏來自社會的一些討論:http://codeigniter.uservoice.com/forums/40508-codeigniter-reactor/suggestions/1269847-controller-prefixes

+0

我正在使用datamapper,所以我不想製作User_model。但是,是的,型號用戶,控制器用戶可以。我還發現這個http://phpfour.com/blog/2009/09/codeigniter-controller-naming-convention-modified/你覺得怎麼樣? – musa 2012-03-24 02:35:51

+0

至#2去,這是有道理的,我認爲這是多一點SEO友好,但想獲得更多的參考。 – Jahmic 2013-09-20 08:43:02

1

你爲什麼不只是讓你的控制器單數和您的模型/數據庫表複數?

相關問題