Создайте токен для каждой записи, используя Code Igniter и Doctrine ORM. - PullRequest
0 голосов
/ 16 ноября 2010

У меня есть настройка модели с использованием Doctrine.Я хотел бы сгенерировать токен для каждой записи, поэтому я думаю мне нужно перегрузить функцию save () Doctrine чем-то вроде этого, который я нашел с помощью Symfony:

class JobeetAffiliate extends BaseJobeetAffiliate
{
  public function save(Doctrine_Connection $conn = null)
  {
    if (!$this->getToken())
    {
      $this->setToken(sha1($this->getEmail().rand(11111, 99999)));
    }

    return parent::save($conn);
  }

  // ...
} 

Мой текущийМодель выглядит следующим образом:

<?php
class Photo extends Doctrine_Record {

    public function setTableDefinition() {
        $this->hasColumn('photo_path', 'string', 255, array('unique' => 'true'));
        $this->hasColumn('count', 'integer', 4, array('unsigned' => 'true'));
        $this->hasColumn('is_count', 'integer', 4, array('unsigned' => 'true'));
        $this->hasColumn('region_id', 'integer', 4);
        $this->hasColumn('region_id', 'integer', 4);
        $this->hasColumn('token', 'string', 255);
    }

    public function setUp() {
        $this->actAs('Timestampable');
        $this->hasOne('Region', array(
            'local' => 'region_id',
            'foreign' => 'id'
        ));     
    }   

}

Любая помощь в создании поля токена в модели будет принята с благодарностью, так как пока я не могу понять, как перегрузить save () в этой модели соответствующим образом.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2010

Вы должны взглянуть на Record Hooks Doctrine и его preSave() функцию. Так что вам нужно работать только внутри вашей модели:

public function setTableDefinition() {
    $this->hasColumn('photo_path', 'string', 255, array('unique' => 'true'));
    $this->hasColumn('count', 'integer', 4, array('unsigned' => 'true'));
    $this->hasColumn('is_count', 'integer', 4, array('unsigned' => 'true'));
    $this->hasColumn('region_id', 'integer', 4);
    $this->hasColumn('region_id', 'integer', 4);
    $this->hasColumn('token', 'string', 255);
}

public function setUp() {
    $this->actAs('Timestampable');
    $this->hasOne('Region', array(
        'local' => 'region_id',
        'foreign' => 'id'
    ));     
}   

public funcion preSave($event) {
    if( ! $this->token) {
        $this->setToken(sha1($this->getEmail().rand(11111, 99999)));
     }
}
0 голосов
/ 16 ноября 2010

Вы не можете просто добавить метод save () в свой класс Photo?

...