作成中のこの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 {
....
モデルを作成するときは、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+を使用します。同じ問題が発生し、私の場合は、uppserの場合からモデルファイル名を変更しました。
Logon_model.php
モデルは次のようになります。あなたのものがこのようなものであることを確認してください。
<?php
class Logon_model extends CI_Model {
function __construct()
{
parent::__construct();
}
function myFunc()
{
// do something
}
}
大文字のクラス名に注意してください。
読み込むには:
$this->load->model('logon_model');
すべて小文字に注意してください。
私はこの方法でこれを解決します:
$autoload['model'] = array('Page_model'=>'page');
うまくいきます。
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に次の名前のファイルを作成する必要があることを意味します
ファイル名とクラス名の最初の文字は大文字でなければなりません。
モデルクラスは
クラスLogon_modelはCI_Modelを拡張します
ファイル名はLogon_model.phpになります
のようにあなたのコントローラーからアクセスします
$ this-> load-> model( 'Logon_model');
@jakentusの答えに加えて、以下が私のために働いたものです:
Modelsパッケージのファイル名を_Logon_model.php
_に変更します(@jakentusが正しく言ったように、最初の文字は大文字です)
クラス名をファイル名と同じように変更します.
_class Logon_model extends CI_Model
_
Loadメソッドの名前も次のように変更します
$this->load->model('Logon_model');
お役に立てれば。ハッピーコーディング。 :)
モデルは、モデル名の最初の文字を大文字にし、残りを小文字にして名前を付けて呼び出す必要があります。
例:$this->load->model('Logon_model');
そして:
class Logon_model extends CI_Model {
...
ただし、ファイル名については正しいです。
同じ問題が発生しましたが、application/config/routes.phpファイルを変更して修正しました。
コントローラーのディレクトリを再構築し、routesファイルに反映するのを忘れました。
以前:
$route['application/apply'] = 'ex/application/account/create';
そしていま:
$route['application/apply'] = 'application/account/create';
モデル名の最初の文字を大文字に変更する必要があります。ローカルホストでは、小文字は適切に機能しますが、オンラインでは機能しません。エクサの場合:
common_model.php
置換後
Common_model.php
私が持っていた私の問題を追加するだけです:
$this->load->model("planning/plan_model.php");
そしてその .php
はそこにあるべきではないため、次のようになっているはずです。
$this->load->model("planning/plan_model");
これが誰かを助けることを願って
大文字で始まるモデル名の変更は機能します。例:login_model.phpの代わりにLogin_model.php
モデルファイル名を変更し、次のように大文字で始めます:Logon_model.php
これは、プロジェクトがWindowsサーバーからLINUXサーバーに移行するときに発生します。これは、Linuxでは大文字と小文字が区別されますが、Windowsでは区別されないためです。
そのため、Windowsでは大文字でファイル名を書かなくても、Linuxでもうまくいきません。
確認してください:
私の場合、1と2は正しいものでしたが、拡張子が.phpのファイルの名前を忘れていました。どうやって忘れたのかわからないが、問題を解明するのに苦労したことは確かだ