簡體   English   中英

CI 模型訪問 -> 以小寫字母指定模型名稱時,無法找到您指定的模型

[英]CI Model Access -> Unable to locate the model you have specified when model name is specified in lower case letters

每次控制器嘗試訪問家庭模型時,它都會顯示

Unable to locate the model you have specified: HomeModel

錯誤。

控制器訪問視圖沒有問題。

在我將模型名稱更改為小寫后,它能夠訪問模型類。 有人可以解釋為什么會發生這種情況嗎?

請參閱CodeIgnitor 的正確命名結構

網址

您的 URL 通常應全部為小寫字母。 如果您期望大寫字母,您可能會意外排除小寫字母,即使它們是相同的 URL。 示例:www.example.com/controller/method/param

控制器

控制器類名稱應全部小寫,第一個字母除外。

如果您的 URL 是 www.example.com/gallery,則控制器名稱是 Gallery。 如果您的 URL 是 www.example.com/admin_folder,則控制器名稱是 Admin_folder。 控制器文件名應與類名匹配,但全部小寫。

Gallery :: gallery.php Admin_folder :: admin_folder.php 控制器方法也應該全部小寫。 大寫字母有一定的靈活性,但與 URL 類似,它也有可能弄錯一些東西(這是一個大寫字母干擾表單驗證回調方法的示例)。

楷模

模型遵循與控制器相同的大部分約定。 唯一的區別是模型方法名稱,它可以使用您對大寫的偏好。 由於這些方法與 URL 無關,並且使用普通 PHP OOP 調用,因此您可以隨意命名它們。

建議使用全小寫版本加載模型。 雖然 CI 不需要它,但如果他們使用大寫字母加載它,它會混淆一些用戶,然后嘗試以全部小寫形式訪問它(這是由於本機 PHP 對類屬性 [和一般變量] 區分大小寫) ,而不是 CodeIgniter)。

  • 模型類名:Users_model(_model 后綴也不是必需的,但有些人可能會使用它作為個人偏好,或防止與用戶控制器的命名沖突)。

  • 模型文件名:users_model.php

  • 模型加載:$this->load->model('users_model')

  • 模型方法名稱(都可以):$this->users->getAll()、$this->users->find_by_name($name) 等。

圖書館

除了文件名之外,庫遵循相同的約定。 在這種情況下,文件名應該與類名匹配。

與模型類似,建議使用小寫名稱加載庫。

這些規則對於 CI 的庫(位於應用程序/核心和應用程序/庫,以及自定義或第三方庫中)是相同的。

特別注意:在擴展默認 CI 庫時,application/config.php 中定義的前綴會起作用。 此前綴通常應全部為大寫,后跟下划線。 默認值為 MY_。

庫類名:照片庫文件名:Photos.php,庫加載:$this->load->library('photos') Helpers

助手名稱和加載都是小寫的。 文件名由助手名稱和 _helper 組成。

助手名稱:url 助手文件名:url_helper.php 助手加載:$this->load->helper('url')

CodeIgniter 的命名約定有些不一致,但確實沒有太多的規則,所以它們很容易習慣和記憶。 我很少在 CI 中遇到命名和加載問題,當我這樣做時,通常是因為我只是在做一個與 Composer 相關的項目,所以我養成了不同的習慣。

在撰寫本文時,此答案中的規則適用於 CodeIgniter 2.1.x。 有關於 Github for 3.0 的討論,以更好地為命名約定增加更多的一致性,如果您願意,您可以閱讀這些內容並做出貢獻。

在 codeigniter 上創建模型時

類和文件名應該有第一個字母作為大寫,這也適用於控制器和庫等。

Home_model.php

class Home_model extends CI_Model {
   public function __construct() {
     parent::__construct();
   }

   public function some_function() {

   }
}

如何僅在控制器示例上加載模型

class Welcome extends CI_Controller {
   public function __construct() {
     parent::__construct();
     $this->load->model('home_model');
     // Or In a subfolder application / models / subfoldername
     $this->load->model('subfoldername/home_model');
   }

   public function index() {
     $data['results'] = $this->home_model->some_function();
     $this->load->view('welcome_message', $data)
   }

}

暫無
暫無

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

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