Есть ли способ не переопределить все свойство с подмоделью в Kohana? - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть следующая цепочка Моделей:

Model_Auth_User
Model_Module_User
Model_App_User
Model_User

... где Model_User - это модель, которую я на самом деле использую, и это просто фиктивный класс, в то время как другие имеют функциональность.1005 *

Моя проблема в том, что в Model_App_User я хочу добавить столбец к модели, скажем, employee_flag.Мне нужно добавить его в _labels, _table_columns и, возможно, другие.Конечно, если я добавлю следующее в Model_App_User:

 protected $_labels = array(
      'employee_flag' => 'Employee Flag',
 );

, весь массив меток будет перезаписан.Не то, что я хочу.

Однажды я подумал о том, чтобы добавить свойство с именем _override_properties, которое я буду обрабатывать при инициализации и объединять со свойствами объекта.Но это также не помогает, потому что если я использую его в Model_Module_User, он будет перезаписывать все, что я вставил в Model_App_User.

Какие еще есть варианты?

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Есть 2 решения для этого. Вы можете изменить способ работы ORM, определив метки в методе с именем labels. Я думаю, это было бы что-то вроде этого:

public static function labels ()
{
    return array
    (
        'name' => 'First Name'
    );
}

Тогда в ваших дочерних классах это будет так же просто, как:

public static function labels ()
{
    $labels = parent::labels();

    // Add new or modify labels.
    $labels['last'] = 'Last Name';

    return $labels;
}

Вам нужно изменить способ, которым ORM извлекает метки, чтобы это работало. Если у вас нет времени, чтобы изменить работу ORM, то Zahymakas решение добавления в массив в дочернем элементе __construct является хорошим компромиссом.

0 голосов
/ 10 ноября 2010

А как же $this->_labels['employee_flag'] = 'Employee Flag';?

...