9

私は5時間頭を叩いていて、ようやく問題を解決しましたが、理由がわからないと眠れません. 最初に問題を説明しましょう。

codeigniter HMVC 拡張機能を使用し、ion_auth を別のモジュールとしてインストールしました。

|-modules
|--auth
|---config
|-----ion_auth.php
|---controllers
|-----auth.php
|---models
|-----ion_auth_model.php
|---views

ユーザーのグループを取得しようとしたときに、有線 SQL エラーが発生し始めました。次に、問題を絞り込んで、の項目がファイルconfig/ion_auth.phpに読み込まれていないことがわかりました。ion_auth_model.php

エラー - 2016-02-24 20:09:26 --> クエリ エラー: SQL 構文にエラーがあります。near 'as , を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してくださいidname、 。descriptionに参加します。=。idどこ 。= '2'' at line 1 - 無効なクエリ: SELECT 。としてid、。name、 。descriptionに参加します。=。id どこ 。= '2'

'ion_auth'次に、いくつかのことを試してみましたが、いくつかのメソッド呼び出しからインデックスを削除すると、ion_auth_model.phpすべてが機能し始めました。

私が変更され

$this->tables  = $this->config->item('tables', 'ion_auth');
$this->join            = $this->config->item('join', 'ion_auth);

$this->tables  = $this->config->item('tables');
$this->join            = $this->config->item('join');

なぜそれが機能したのか誰か教えてもらえますか?

4

1 に答える 1

1

これは、ファイル system\core\Config.php にある CodeIgniter 関数 config->item() の内部実装です。

/**
 * Fetch a config file item
 *
 * @param   string  $item   Config item name
 * @param   string  $index  Index name
 * @return  string|null The configuration item or NULL if the item doesn't exist
 */
public function item($item, $index = '')
{
    if ($index == '')
    {
        return isset($this->config[$item]) ? $this->config[$item] : NULL;
    }

    return isset($this->config[$index], $this->config[$index][$item]) ? $this->config[$index][$item] : NULL;
}

パラメータを渡す$indexと、関数は両方のパラメータが構成で初期化されているかどうかをチェックしconfig[$index]、CI インスタンスを返します。またはnullそれらのいずれかが初期化されていない場合。

CI インスタンスで が設定されていない場合config[$item]、関数は always を返しますnull。を回避するときに呼び出しがクラッシュしないため、これが当てはまらないと仮定しましょう$index

したがって$index、2 番目のパラメーターとして渡すと、関数が を返すため、コードがクラッシュします。これは、CI インスタンスの が設定されていないnullことを意味します。config[$index]ここで問題は、なぜ設定されていないのかということです。ここでお手伝いすることはできませんが、いくつかのモジュールをロードしていないようです。

よろしくお願いします

于 2016-03-04T17:05:46.000 に答える