Написание модельных методов в Доктрине - PullRequest
2 голосов
/ 29 июля 2010

Я бы хотел инкапсулировать функциональность, характерную для определенных моделей, включив методы в определения классов моделей. Так, например:

abstract class BaseUser extends DoctrineRecord {    

    public function setTableDefinition(){  
       //etc.  
    }  

    public function setUp(){  
       //etc.  
    } 

    public function getName(){  
       return $this->name  
    }
}

$ this-> name выдает ошибку, как и $ name. Можно ли получить доступ к свойствам модели отсюда?

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Свойства можно получить , используя $ this-> propertyName, как и ожидалось.Моя проблема заключалась в том, что getProperty (в моем примере getName) - это функция, которую автоматически создает среда Doctrine, создавая конфликт, когда я пытался создать свою собственную.Я изменил имя на whatIsName (), и все заработало.

0 голосов
/ 29 июля 2010

Классы Basexxx являются абстрактными.Вы должны добавить свой метод в класс User, который расширяет BaseUser.

[Edit] Вы можете получить доступ к свойствам базового класса в вашем дочернем классе, используя $this->property.Например:

class User extends BaseUser {
   public function getWelcomeString() {
      return 'Welcome, ' . $this->name . '!';
   }
}

Затем вы можете получить доступ к своим пользовательским функциям в дополнение ко всем свойствам базового класса из экземпляра вашего класса chilod:

$user = new User();
//Hydrate object from database
echo $user->getWelcomeString();     // implemented in your child class
echo 'Your name is ' . $user->name; // implemented in the base class
...