簡體   English   中英

CodeIgniter PHP 模型訪問“無法找到您指定的模型”

[英]CodeIgniter PHP Model Access "Unable to locate the model you have specified"

我一直在嘗試為我正在構建的這個網站加載一些模型。 但是,由於未知原因,它會帶來以下錯誤:

An Error Was Encountered

Unable to locate the model you have specified: logon_model

現在,我已經完成了我的研究。 問題在於 IC 以小寫形式處理文件名。 但是,我的文件和文件調用都是小寫的,如下所示:

echo "VALIDATING";
            // Validation passed. Off we go to account info verification from AA's database. God help us all.
            $this->load->model('logon_model');
            echo "FOUND MODEL";
            $res = $this->logon_model->verify_user($this->input->post('username'),$this->input->post('password'));
            echo $this->input->post('username');
            echo $this->input->post('password');

執行達到“FOUND MODEL”,因此停止模型加載。 我曾嘗試使用:

 $this->load->model(site_url('logon_model'));

沒有結果。 需要提及模型文件是否正確放置在正確的模型文件夾中?

我怎樣才能解決這個問題 ?

編輯:模型文件的標題:

class Logon_model extends CI_Model {

....

創建模型時,您需要將文件放在application/models/並以全部小寫命名文件 - 如logon_model.php

logon_model.php應包含以下內容:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');


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

現在,您可以做的是測試您的應用程序模型是否可訪問,就是嘗試在瀏覽器中打開它 - 像這樣:
http://example.org/application/models/logon_model.php

如果您看到文本“不允許直接腳本訪問”,則表示您找到了正確的文件(如果您有疑問,請嘗試在第一行的 exit() 中編寫其他內容)。

其次,為了在您的控制器中加載模型,您應該能夠這樣做:

public function index()
{

    $this->load->model('logon_model');
    ...

}

如果以上所有內容都按預期進行檢查,我將開始查看文件權限和/或可能的符號鏈接(如果您正在使用)。

我使用 codeigniter 3+。 我遇到了同樣的問題,在我的情況下,我從大寫字母開始更改了模型文件名。

登錄模型.php

模型應該是這樣的: 確保你的模型是這樣的。

    <?php
    class Logon_model extends CI_Model {

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

    function myFunc()
    {
      // do something
    }
}

注意大寫的類名。

要加載它,請使用:

$this->load->model('logon_model');

注意所有小寫。

我用這種方式解決了這個問題:

  1. 我重命名文件做 Page_model.php
  2. 類名到 Page_model 擴展...
  3. 我調用自動加載: $autoload['model'] = array('Page_model'=>'page');

工作正常.. 我希望有所幫助。

在 CodeIgniter 3.0-dev(從 gi​​thub 獲取)中,這不起作用,因為 CI 搜索為第一個字母大寫。

你可以在 system/core/Loader.php 第 282 行或下面找到代碼:

$model = ucfirst(strtolower($model));

foreach ($this->_ci_model_paths as $mod_path)
{
    if ( ! file_exists($mod_path.'models/'.$path.$model.'.php'))
    {
        continue;
    }

    require_once($mod_path.'models/'.$path.$model.'.php');

    $CI->$name = new $model();
    $this->_ci_models[] = $name;
    return $this;
}

這意味着我們需要在 application/models/Logon_mode.php 上創建具有以下名稱的文件

文件名和類名的首字母必須大寫。

你的模型類將是

類 Logon_model 擴展了 CI_Model

文件名將是Logon_model.php

從您的控制器訪問它

$this->load->model('Logon_model');

添加到@jakentus 答案,以下是對我有用的內容:

  1. 將模型包中的文件名更改為Logon_model.php (@jakentus 正確說的第一個字母大寫)

  2. 將類名更改為與文件名相同,即

    class Logon_model extends CI_Model

  3. 將加載方法中的名稱也更改為

    $this->load->model('Logon_model');

希望這可以幫助。 快樂編碼。 :)

模型的命名和調用必須將模型名稱的第一個字母大寫,其余字母小寫。

例如: $this->load->model('Logon_model');

和:

class Logon_model extends CI_Model {
...

但是你對文件名是正確的。

我遇到了同樣的問題,但我通過更改我的 application/config/routes.php 文件修復了它。

我對我的控制器目錄進行了一些重組,但忘記在路由文件上生效。

之前:

$route['application/apply'] = 'ex/application/account/create';

現在:

$route['application/apply'] = 'application/account/create';

更改以大寫開頭的型號名稱有效。 示例:Login_model.php 而不是 login_model.php

您必須更改型號名稱的首字母大寫。 在本地主機小寫字母工作正常但在線這不起作用。 例如:

common_model.php

將其替換為

Common_model.php

只是添加我的問題:

$this->load->model("planning/plan_model.php");

.php不應該在那里,所以它應該是:

$this->load->model("planning/plan_model");

希望這有助於某人

更改模型文件名,以大寫字母開頭,如下所示:Logon_model.php

當我們將項目從 windows 服務器遷移到 LINUX 服務器時會發生這種情況,因為 linux 區分大小寫而 windows 不區分大小寫。

因此,在 Windows 上,即使不使用大寫字母寫入文件名,它也可以正常工作,但在 linux 上則不行。

如果您使用的是 Linux,請確保您的文件名必須與加載模型方法第一個參數中傳遞的字符串匹配。

$this->load->model('Order_Model','order_model');

你可以使用第二個參數,你可以從你的模型中調用方法,它也可以在 Linux 和 Windows 上運行

$result = $this->order_model->get_order_details($orderID);

確保:

  1. 首字母大寫
  2. 類名 確切名稱作為文件名
  3. 確保您的文件以 .php 擴展名結尾

就我而言,我的 1 和 2 是正確的,但忘記用 .php 擴展名命名我的文件。 我怎么忘了,不知道,但這確實讓我很難找出問題所在

你可以給任何你想要的名字。

風格指南是建議而不是葡萄汁

但是你必須小心在任何地方使用相同的名稱

例如對於 Test_Model 你必須:

班級名稱

        class Test_Model extends CI_Model

文檔名稱

        Test_Model.php

負載模型

        $this->load->model('Test_Model');

使用型號

        $this->Test_Model

為了避免使用硬編碼字符串,您可以像這樣加載模型:

        $this->load->model(Test_Model::class);

十個在瓜達埃爾瓜迪奧的歷史性保護區模型,從十個擴展模型.php到nombre para que lo reconozca en的控制區

暫無
暫無

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

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