web-dev-qa-db-ja.com

CodeIgniter PHP Model Access "指定したモデルが見つかりません"

作成中のこのWebサイトのいくつかのモデルをロードしようとしています。ただし、不明な理由により、次のエラーが発生します。

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');

実行はnot「FOUND MODEL」に達するため、モデルのロードで停止します。私は使用しようとしました:

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

結果なし。モデルファイルが適切なモデルフォルダに正しく配置されていることを言及する必要がありますか?

どうすれば修正できますか?

編集:モデルファイルのヘッダー:

class Logon_model extends CI_Model {

....
37

モデルを作成するときは、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');
    ...

}

上記のすべてが期待どおりにチェックアウトされた場合、ファイルのアクセス許可やシンボリックリンク(使用している場合)の確認を開始します。

61
Repox

Codeigniter 3+を使用します。同じ問題が発生し、私の場合は、uppserの場合からモデルファイル名を変更しました。

Logon_model.php

57
jakentus

モデルは次のようになります。あなたのものがこのようなものであることを確認してください。

    <?php
    class Logon_model extends CI_Model {

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

    function myFunc()
    {
      // do something
    }
}

大文字のクラス名に注意してください。

読み込むには:

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

すべて小文字に注意してください。

8
wclark

私はこの方法でこれを解決します:

  1. Page_model.phpのファイル名を変更します
  2. Page_modelのクラス名が拡張...
  3. オートロードで呼び出します:$autoload['model'] = array('Page_model'=>'page');

うまくいきます。

5
Gabriel Glauber

CodeIgniter 3.0-dev(githubから取得)では、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に次の名前のファイルを作成する必要があることを意味します

4
ialbescu

ファイル名とクラス名の最初の文字は大文字でなければなりません。

モデルクラスは

クラスLogon_modelはCI_Modelを拡張します

ファイル名はLogon_model.phpになります

のようにあなたのコントローラーからアクセスします

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

3
Avnish alok

@jakentusの答えに加えて、以下が私のために働いたものです:

  1. Modelsパッケージのファイル名を_Logon_model.php_に変更します(@jakentusが正しく言ったように、最初の文字は大文字です)

  2. クラス名をファイル名と同じように変更します.

    _class Logon_model extends CI_Model_

  3. Loadメソッドの名前も次のように変更します

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

お役に立てれば。ハッピーコーディング。 :)

2
Atul O Holic

モデルは、モデル名の最初の文字を大文字にし、残りを小文字にして名前を付けて呼び出す必要があります。

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

そして:

class Logon_model extends CI_Model {
...

ただし、ファイル名については正しいです。

2

同じ問題が発生しましたが、application/config/routes.phpファイルを変更して修正しました。

コントローラーのディレクトリを再構築し、routesファイルに反映するのを忘れました。

以前:

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

そしていま:

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

1
Suleiman Umar

モデル名の最初の文字を大文字に変更する必要があります。ローカルホストでは、小文字は適切に機能しますが、オンラインでは機能しません。エクサの場合:

common_model.php

置換後

Common_model.php
1
sandeep kumar

私が持っていた私の問題を追加するだけです:

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

そしてその .phpはそこにあるべきではないため、次のようになっているはずです。

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

これが誰かを助けることを願って

1
Frank Conry

大文字で始まるモデル名の変更は機能します。例:login_model.phpの代わりにLogin_model.php

1
user3642940

モデルファイル名を変更し、次のように大文字で始めます:Logon_model.php

これは、プロジェクトがWindowsサーバーからLINUXサーバーに移行するときに発生します。これは、Linuxでは大文字と小文字が区別されますが、Windowsでは区別されないためです。

そのため、Windowsでは大文字でファイル名を書かなくても、Linuxでもうまくいきません。

0
Krish

確認してください:

  1. 最初の文字は大文字
  2. ファイル名としてのクラス名の正確な名前
  3. ファイルの拡張子が.phpであることを確認してください

私の場合、1と2は正しいものでしたが、拡張子が.phpのファイルの名前を忘れていました。どうやって忘れたのかわからないが、問題を解明するのに苦労したことは確かだ

0
theTypan