0

非 MVC OOP 社内フレームワークからの CI を学んでいるので、まだ多くのことについて混乱しています。通常の OO プログラミング VS とは何かを常に理解しているわけではありません。コード点火方法を行ったもの。とにかく私は私の問題を説明しようとします:

CI_Controller を拡張する Admin という名前のコントローラーが 1 つあります。

クラスを作成しました(カスタムクラスの意味は、CIの一部ではなく作成したものだとしましょう)そのクラスをライブラリフォルダーに配置しました。そのクラスはCI_Controllerも拡張します(その拡張により、loadメソッドと他のCIメソッドを使用できました)。

Admin コントローラーから、カスタム クラス (私はイタリア人なので「ComponiPannello」という名前) を次のようにロードしています。

$parameters = array('baseUrl' => $this->baseUrl);
$this->load->library('ComponiPannello', $parameters); 

すべてが完璧に機能し、「ComponiPannello」はうまく機能し、管理ビューに必要なものを返します。

そのクラスの直後にモデルをロードしたかったのは、管理ビューに詳細情報を渡す必要があるためです。これらの情報は DB に保存されています。これらの追加情報を取得する特定のモデルがあるため、いくつかの行を追加し、コードは次のようになります。

$parameters = array('baseUrl' => $this->baseUrl);
$this->load->library('ComponiPannello', $parameters);
$setup = $this->componipannello->return_data();
$this->data = array_merge($this->data, $setup);

$this->load->model('categories_model');
$this->data['categories'] = $this->categories_model->get_categories(); 

$this->data は、私が管理者のビューに渡すものです。

いくつかの詳細情報:

  • 私が言ったように、管理コントローラーと私のカスタムクラス ComponiPannell の両方が CI_Controller を拡張します
  • ComponiPannello には、次のコンストラクタがあります。

    function _ construct($params) { 親:: _construct(); $this->load->library('session'); $this->baseUrl = $params['baseUrl']; }

  • $this->load->model 部分を $this->load->library の前に移動すると、エラーは発生せず、すべてが機能し、正しいデータが返されますが、自分が何をしているのかを知りたいです。

  • そのままにしておくと、次のエラーが表示されます。

致命的なエラー: 行 ... 内の非オブジェクトでメンバー関数 get_categories() を呼び出します ...

お時間を割いていただき、ありがとうございます。

ルーク

4

2 に答える 2

4

実際にはライブラリではないのに、別のコントローラをライブラリとしてロードしているため、問題が発生している可能性があります。

次のようなライブラリからライブラリ、ヘルパーなどをロードできます。

$CI =& get_instance();

$this->load->helper()ヘルパーをロードする代わりに、ライブラリ内から$CI->load->helper().

これに関する詳細は、CI ドキュメントで入手できます: http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html

于 2013-03-13T16:30:39.517 に答える
3

ライブラリでデータベースオブジェクトを使用するのはなぜですか?

ライブラリ内で CodeIgniter リソースを利用する。ライブラリ内の CodeIgniter のネイティブ リソースにアクセスするには、get_instance() 関数を使用します。この関数は、CodeIgniter スーパー オブジェクトを返します。

通常、コントローラー関数内から、$this コンストラクトを使用して利用可能な CodeIgniter 関数を呼び出します。

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
etc. 

ただし、$this は、コントローラー、モデル、またはビュー内でのみ直接機能します。独自のカスタム クラス内から CodeIgniter のクラスを使用する場合は、次のように実行できます。

まず、CodeIgniter オブジェクトを変数に割り当てます。

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
etc. 
于 2013-03-13T16:32:52.977 に答える