PDO不支持list_columns函数。在将KoO与Kohana的Auth模块一起使用时,为了解决这个问题,您只需在模型类的扩展中将表名列为数组键,因此:
<?php defined('SYSPATH') OR die('No Direct Script Access');
class Model_User extends Model_Auth_User
{
protected $_has_many = array(
'roles' => array(
'through' => 'roles_users',
'foreign_key' => 'user_id',
'far_key' => 'role_id'
)
);
protected $_table_columns = array(
'id' => null,
'username' => null,
'password' => null,
'email' => null,
'logins' => null,
'last_login' => null
);
}
但是,我的user_tokens模型类从true
返回empty($this->_table_columns)
,导致Kohana尝试调用list_columns,这会引发异常。
在同一页面加载时,我的用户模型类和我的角色模型类都按预期运行;当它击中user_tokens时,该过程正在打嗝。我做了一些挖掘,使用var_dump
检查事物;我的第一个暗示是在我的模型类中添加另一个属性没有出现在vardump中。经过一番挖掘后,我终于打电话给ReflectionClass::getFileName
,以确保我实际上正在使用该类的实现。
结果为我的用户模型类生成了APPPATH \ classes \ Model \ User.php,为我的角色模型类生成了APPPATH \ classes \ Model \ Role.php但是我点击了MODPATH \ orm \ classes \ Model \ User \ Token.php为我的user_tokens模型类!
除了使用的实际列之外,我对三种模型的实现之间几乎没有什么不同。我的用户实现在上面,这是我的角色和user_tokens实现:
<?php defined('SYSPATH') OR die('No Direct Script Access');
class Model_Role extends Model_Auth_Role
{
protected $_table_columns = array(
'id' => null,
'name' => null,
'description' => null
);
}
<?php defined('SYSPATH') OR die('No Direct Script Access');
class Model_User_Token extends Model_Auth_User_Token
{
protected $_table_columns = array(
'id' => null,
'user_id' => null,
'user_agent' => null,
'token' => null,
'created' => null,
'expires' => null
);
}
这是MODPATH的Model_User_Token版本:
<?php defined('SYSPATH') OR die('No direct access allowed.');
class Model_User_Token extends Model_Auth_User_Token {
// This class can be replaced or extended
} // End User Token Model
我不明白为什么我的应用程序从MODPATH而不是APPPATH,特别是中拉出Model_User_Token,当正确选取Model_User和Model_Role时(MODPATH包含两者的类似空实现)。
我怎样才能让Kohana拿起我的课程应用版本,而不是课程的模块版本?
答案 0 :(得分:2)
您必须遵循kohana自动加载器的命名约定准则才能找到您的文件。这取决于Kohana的版本:
for Kohana&lt; = 3.2
类class My_Class_Name {}
应位于APPPATH目录中名为classes/my/class/name.php
的文件中(所有小写目录和带有下划线的文件名替换为/
)。
对于Kohana&gt; = 3.3
类class My_Class_Name {}
应位于APPPATH目录中名为classes/My/Class/Name.php
的文件中(PSR-0格式,下划线替换为/
,目录和文件名与类名称匹配)。