Поведение модели Yii в подклассе наследует класс модели AR

Я реализовал класс поведения crypt, который можно прикрепить к модели AR, чтобы прикрепленные атрибуты сохранялись в зашифрованном виде и извлекались в виде расшифрованной строки.

class User extends CActiveRecord 
{
    public function behaviors()
    {
        return array(
            'crypt' => array(
            // this assumes that the behavior is in the folder: protected/behaviors/
            'class' => 'application.behaviors.CryptBehavior',
            // this sets that the attributes to be encrypted/decrypted are encryptedfieldname of the model
            'attributes' => array('password'),
            'useAESMySql' => true
           )
        );
    }
}

Это работает нормально. У меня также есть собственный класс Myuser, который расширяет модель User для написания моих пользовательских функций, поэтому, если я внесу некоторые изменения в свою таблицу user и регенерирую модель, я не потеряю свои собственные функции.

Если я перенесу свою функцию behavior в класс MyUser, поведение не будет привязано и не будет работать должным образом.

class MyUser extends User 
{
    public function behaviors()
    {
        return array(
            'crypt' => array(
            // this assumes that the behavior is in the folder: protected/behaviors/
            'class' => 'application.behaviors.CryptBehavior',
            // this sets that the attributes to be encrypted/decrypted are encryptedfieldname of the model
            'attributes' => array('password'),
            'useAESMySql' => true
           )
        );
    }

    public function customfn1()
    {
         //some code goes here...
    }
}

Любая помощь будет оценена по достоинству. Ссылка: Поведение в крипте


person Suriya    schedule 26.10.2012    source источник
comment
я нигде не смог найти расширение cryptbehavior, это ваше собственное поведение? может вставить грубый план поведения, просто какой класс он расширяет и какие функции он реализует/имеет будет достаточно.   -  person bool.dev    schedule 26.10.2012
comment
обновил пост ссылкой на ссылку!. Спасибо за интерес.   -  person Suriya    schedule 26.10.2012
comment
нет проблем, дай мне посмотреть, могу ли я помочь   -  person bool.dev    schedule 26.10.2012
comment
Я думаю, что этот блог дает мне некоторую дорожную карту для достижения того, чего я хочу. invisipunk.blogspot.in/2011/01/   -  person Suriya    schedule 26.10.2012
comment
какая версия yii у вас?   -  person bool.dev    schedule 26.10.2012


Ответы (2)


Вот рабочее решение. Мне нужно протестировать все сценарии. Спасибо @bool.dev за вашу работу.

class MyUser extends User 
{
    public static function model($className=__CLASS__)
    {
       return parent::model($className);
    }

    public function behaviors()
    {
        return array(
            'crypt' => array(
            // this assumes that the behavior is in the folder: protected/behaviors/
            'class' => 'application.behaviors.CryptBehavior',
           // this sets that the attributes to be encrypted/decrypted are encryptedfieldname of the model
            'attributes' => array('password'),
           'useAESMySql' => true
          )
       );
    }

   public static function getUserByID($id)
   {
      //validation of $id goes here..

      return MyUser::model()->findByPk($id);
   }
}

в моем контроллере

$userModel = MyUser::getUserByID(1);

на мой взгляд

$userModel->password; //gives me the decrypted password; for easy understanding, i used password field here....
person Suriya    schedule 29.10.2012

Вам также придется добавить функцию static model класса в подкласс. Как раз это должно работать:

public static function model($className=__CLASS__)
{
    return parent::model($className);
}
person bool.dev    schedule 26.10.2012
comment
на самом деле ссылка на блог, которую вы дали, тоже верна, но где-то в версиях yii эта функциональность была добавлена. я обновлю ответ, указав, когда произошло это изменение, и более подробную информацию позже, пока, по крайней мере, вы не должны получать ошибки с ответом. - person bool.dev; 26.10.2012
comment
пытаясь ввести некоторую общую практику, чтобы не касаться класса базовой модели. Спасибо за ваш ответ. Я также ищу поведение присоединения на уровне компонентов БД, чтобы избежать этой проблемы. - person Suriya; 26.10.2012
comment
bool.dev ты здесь живешь? позвольте мне ответить что-нибудь! :П - person Asgaroth; 26.10.2012