zend framework и доктрина (геттеры и сеттеры)

Можно ли использовать доктрину для существующих моделей сущностей, таких как:

class user{
protected $_id;
protected $_name;

public function set_id($_id){}
public function get_id(){}
public function set_name($_name){}
public function get_name(){}
}

или для создания или использования моделей с жестко запрограммированными геттерами и сеттерами.

я не хочу использовать

$user->name
$user['name'] 
$user->get('name')

можно ли это сделать с помощью доктрины?

спасибо


person Dr Casper Black    schedule 16.12.2009    source источник


Ответы (1)


Для всех версий до Doctrine 1.2: класс моделей сущностей должен расширять класс Doctrine_Record.

Определение полей модели также должно быть выполнено «доктринальным путем». См.: http://www.doctrine-project.org/documentation/manual/1_2/en/defining-models

пример:

общедоступная функция setTableDefinition() {

   $this->hasColumn('username', 'string', 255);
   $this->hasColumn('password', 'string', 255);

}

Если вы хотите использовать свои собственные жестко запрограммированные сеттеры/геттеры, вы можете переопределить магические геттеры/сеттеры. См.: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction-to-models пример:

класс User расширяет BaseUser {

public function setPassword($password)
{
    return $this->_set('password', md5($password));
} 

}

Последнее замечание/вопрос: использование магических методов установки/получения является хорошей практикой. Вы должны использовать пользовательские методы только в том случае, если вам нужно каким-то образом манипулировать данными.

person samsam    schedule 17.12.2009
comment
Я просмотрел документацию для doctrune 2.0 и нашел это $user = new CmsUser; $user-›setStatus('пользователь'); $user-›setUsername('пользователь' . $i); $user-›setName('Mr.Smith-' . $i); - person Dr Casper Black; 18.12.2009