Kohana Model_Auth_User_Token не переопределяется

PDO не поддерживает функцию list_columns. Чтобы обойти это при использовании PDO с модулем Auth Kohana, вам просто нужно перечислить имена таблиц в качестве ключей массива в расширении класса модели, таким образом:

<?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
);
}

А вот версия 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 содержит одинаково пустые реализации обоих).

Как я могу заставить Кохану забрать мою версию приложения вместо класса модуля?

2

Решение

Чтобы найти ваш файл, вы должны следовать правилам соглашения об именах для автозагрузчика kohana. Это может варьироваться в зависимости от версии Kohana:

для Кохана <= 3,2

Класс class My_Class_Name {} должен быть в файле с именем classes/my/class/name.php в вашем каталоге APPPATH (все строчные каталоги и имена файлов с подчеркиванием заменены на /).

Для Кохана> = 3.3

Класс class My_Class_Name {} должен быть в файле с именем classes/My/Class/Name.php в вашем каталоге APPPATH (формат PSR-0, подчеркивания заменены на / и каталоги и имена файлов соответствуют имени класса case).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]