PDO не поддерживает функцию list_columns. Чтобы обойти эту проблему при использовании PDO с модулем Auth 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 модели класс возвращается 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 \ Пользователь \ 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
Я не понимаю, почему мой приложение вытягивает Model_User_Token из MODPATH вместо APPPATH, особенно, когда Model_User и Model_Role правильно подбираются (MODPATH содержит аналогичные пустые объекты и).
Как я могу получить Кохану, чтобы забрать мою версию приложения класса, а не версию модуля класса?
У вас есть источник различий в нижнем регистре/имени? Я думал, что это Windows <> Unix вещь – kero
Вы можете увидеть это в верхней части этого документа http://kohanaframework.org/3.3/guide/kohana/conventions для v3.3. Для v3.2 упоминается также в верхней части, что все файлы должны быть строчными буквами http://kohanaframework.org/3.2/guide/kohana/conventions –