7

特定のモデルがすでにロードされているかどうかを確認するために使用できるネイティブのcodeigniter関数はありますか?phpclass_exists()を使用して、モデルがすでにロードされているかどうかを確認できますか?

4

4 に答える 4

13

CI_Loaderコアクラスを拡張したくなるでしょう。(コアクラスの拡張を参照してください)

class MY_Loader extends CI_Loader {

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

    /**
     * Returns true if the model with the given name is loaded; false otherwise.
     *
     * @param   string  name for the model
     * @return  bool
     */
    public function is_model_loaded($name) 
    {
        return in_array($name, $this->_ci_models, TRUE);
    }
}

次のようにして、特定のモデルをチェックします。

$this->load->is_model_loaded('foobar');

その戦略はすでにCI_Loaderクラスで使用されています。

このソリューションは、CIのモデル命名機能をサポートします。この機能では、モデルはモデルクラス自体とは異なる名前を持つことができます。このclass_existsソリューションはその機能をサポートしていませんが、モデルの名前を変更しない場合は正常に機能するはずです。

注:構成を変更した場合は、変更されてsubclass_prefixいない可能性がありMY_ます。

于 2013-02-19T03:00:15.393 に答える
8

最も簡単な解決策は、PHP関数class_existsを使用することです。

http://php.net/manual/en/function.class-exists.php

例えば。Post_modelが定義されているかどうかを確認したい場合。

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

/*

     a lot of code

*/

if ( class_exists("Post_model") ) {
    // yes
}
else {
    // no
}

最も単純なものが最適です。

于 2015-06-14T11:13:25.427 に答える
4

編集:

log_message()関数を使用できます。

これをモデルのコンストラクターに入れます(parent :: Model())

log_message ("debug", "model is loaded"); 

config.phpファイルでログ構成をデバッグモードに設定することを忘れないでください

$config['log_threshold'] = 2; 

そして、system / logsディレクトリのアクセス許可を書き込み可能に設定します(デフォルトでは、CIはここにログファイルを作成します)

または、logsディレクトリを別のディレクトリに設定します

$config['log_path'] = 'another/directory/logs/'; 

その後、CIはディレクトリにログファイルを作成します。必要に応じてログファイルを監視します。デバッグメッセージを取得して、モデルがログファイルにすでにロードされているかどうかを確認できます。

于 2013-02-19T01:13:58.737 に答える
4

Maxime Morin&Tomexsansが書いたものをリフして、これが私の解決策です。

<?php 
class MY_Loader extends CI_Loader { 
    /**
     * Model Loader
     *
     * Overwrites the default behaviour
     *
     * @param   string  the name of the class
     * @param   string  name for the model
     * @param   bool    database connection
     * @return  void
     */
    function model ($model, $name = '', $db_conn = FALSE) {
        if (is_array($model) || !class_exists($model)) {
            parent::model($model, $name, $db_conn);
        }
    }
}
?>

このように、モデルがロードされているかどうかを(意識的に)チェックする必要はありません:)

于 2013-12-20T11:55:18.910 に答える