Codeigniter HMVC + ion_auth 加载配置项时遇到问题
Codeigniter HMVC + ion_auth trouble loading the config items
我敲了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
文件中。
ERROR - 2016-02-24 20:09:26 --> Query error: You have an error in your
SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near 'as id
, .name
,
.description
JOIN ON .=.id
WHERE . = '2'' at line 1 - Invalid
query: SELECT . as id
, .name
, .description
JOIN ON .=.id
WHERE . = '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');
谁能告诉我它为什么有效?
这是在文件 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
参数时,该函数检查两个参数是否在配置中初始化,returns config[$index]
CI 实例;或 null
如果其中任何一个未初始化。
如果 CI 实例中没有设置 config[$item]
,函数 returns 总是 null
。让我们假设情况并非如此,因为您的呼叫在避免 $index
.
时不会崩溃
因此,当您将 $index
作为第二个参数传递时,您的代码会崩溃,因为函数 returns null
,这意味着 config[$index]
的 CI 未设置实例。现在的问题是为什么它没有设置,我在这里帮不了你,但你似乎缺少加载一些模块。
此致
我敲了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
文件中。
ERROR - 2016-02-24 20:09:26 --> Query error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as
id
, .name
, .description
JOIN ON .=.id
WHERE . = '2'' at line 1 - Invalid query: SELECT . asid
, .name
, .description
JOIN ON .=.id
WHERE . = '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');
谁能告诉我它为什么有效?
这是在文件 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
参数时,该函数检查两个参数是否在配置中初始化,returns config[$index]
CI 实例;或 null
如果其中任何一个未初始化。
如果 CI 实例中没有设置 config[$item]
,函数 returns 总是 null
。让我们假设情况并非如此,因为您的呼叫在避免 $index
.
因此,当您将 $index
作为第二个参数传递时,您的代码会崩溃,因为函数 returns null
,这意味着 config[$index]
的 CI 未设置实例。现在的问题是为什么它没有设置,我在这里帮不了你,但你似乎缺少加载一些模块。
此致