PDO不支持list_columns函數。要使用PDO使用Kohana開發的驗證模塊時解決這個問題,你只需要列出表名作爲數組鍵模型類的一個擴展,正是如此:Kohana Model_Auth_User_Token沒有被覆蓋
<?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模型類是返回 from 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
);
}
下面是Model_User_Token從MODPATH版本:
<?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拿起我的應用程序版本的類,而不是該類的模塊版本?
你有小寫/專有名稱區別的來源嗎?我認爲這是一個Windows <> Unix的東西 – kero
你可以在本文頂部附近看到它提到http://kohanaframework.org/3.3/guide/kohana/conventions for v3.3。對於v3。2也有人提到,所有的文件都應該是小寫的http://kohanaframework.org/3.2/guide/kohana/conventions –