次のようなモデルオブジェクトを作成しています。$object1= new Object1(); データベースにはobject1sという名前のテーブルがあります。Object1クラスは、DataMapperを拡張する空のクラスです。それは問題なく動作します。データを保存し、データベースからデータを取得することができます(別のデータベースクライアントを使用してデータを表示できます)。
別のオブジェクト(および別のテーブル)で同じことを試みました。たとえば、$ object2 = new Object2(); 今回は、次のエラーメッセージが表示されます。
致命的なエラー:6049行目の/Applications/XAMPP/xamppfiles/htdocs/c/application/libraries/Datamapper.phpの非オブジェクトでメンバー関数line()を呼び出す
6049行目は次のようになります。
$ this-> lang-> line($ key);を返します。
Object1をインスタンス化したとき、この時点で$ this-> langはDM_Langのインスタンスに設定されていましたが、2番目のオブジェクトをインスタンス化したときは$this->langは"en"に設定されています。2つの違いは、名前とデータベーステーブルだけです。
これを修正するにはどうすればよいですか?なぜ違うのですか?$ this-> langはどこに設定されていますか(私はすでにデバッガーをステップスルーしていて、それを見つけることができません)?
データベースはMySQLです。私はこれをMacOSXLionでの開発目的で実行しています。WebサーバーはApacheです。DataMapperORMv1.8.2を使用しています。
問題の正確なコードを要求するコメントがありました。これは私がテストした完全な正確なコードです(各ファイルからコピーして貼り付けました)。
Object1はMovie、models/movie.phpと呼ばれます。
<?php
class Movie extends DataMapper {
}
オブジェクト2はImage、models/image.phpと呼ばれます。
<?php
class Image extends DataMapper {
}
コントローラは次のようになります、controllers / test.php:
<?php
class Test extends CI_Controller {
public function newdata()
{
// The following line runs as expected
$movie = new Movie();
// The following line fails with the Fatal error mentioned above
$image = new Image();
}
}
DataMapperv1.8.2に付属のインストール手順に従いました。私のindex.phpファイルには、CodeIgniterブートストラップファイルをロードする前に次のものが含まれています。
/* --------------------------------------------------------------------
* LOAD THE DATAMAPPER BOOTSTRAP FILE
* --------------------------------------------------------------------
*/
require_once APPPATH.'third_party/datamapper/bootstrap.php';
これは、Movieオブジェクトで非常にスムーズに機能します。別のSQLクエリツールを使用して、データを書き込み、そこにあることを確認できます。
「$movie= ...」の行がコメント化されている場合、「$ image=...」の行はエラーなしで実行されることに気づきました。ただし、アプリが正しく機能するには、両方が必要です。
CI_VERSION=2.1.0を使用しています。
ご協力ありがとうございました。