Как переопределить/перегрузить сеттеры BaseUser (из FosUserBundle)?

Я использую Symfony 2.0.

У меня есть класс Employee, который наследуется от BaseUser.

Мне нужно переопределить метод setUsername (среди прочего):

Мой метод Employee.php такой:

public function setUsername()
{
    $name=$this->getName();

    $this->username=($name);//just an example
}

Но когда я очищаю кеш, я получаю ошибку:

MyBundle\Entity\Employee::setUsername() must be compatible with that of FOS\UserBundle\Model\UserInterface::setUsername()

РЕДАКТИРОВАТЬ:
Я видел, что метод setUsername в FOS\UserBundle\Model\UserInterface нуждается в аргументе $username, но моя функция setUsername в том виде, в каком она определена, не нуждается в этом аргументе. В более общем плане мой вопрос заключается в том, как переопределить/переопределить методы, а также как добавить свои собственные ограничения к полям и методам, определенным в Fos User. Большое спасибо

Как я могу переопределить эту функцию? Я пробовал parent::setUsername(), но у меня ошибка синтаксического анализа:

PHP Parse error:  syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting '('

person Reveclair    schedule 19.07.2012    source источник


Ответы (1)


Функция определяется как:

function setUsername($username);

Таким образом, ваша функция должна быть такой же, но в вашей отсутствует параметр. Добавьте его, и вы должны быть в порядке.

На самом деле это не имеет ничего общего с Symfony2 или FOS Bundle в частности, так обычно работает PHP. Поэтому постарайтесь более правильно понять сообщение об ошибке. И в следующий раз, когда вы увидите сообщение об ошибке, которое вы не совсем понимаете, спросите конкретно о сообщении об ошибке и той его части, которая вам непонятна. Просто говорю: спросите напрямую о той части, о которой вы хотите узнать. Не о той части, которую вы пытаетесь сделать (нет ничего плохого в том, чтобы пытаться, просто говорю, что мы все учимся, делая. Но ключевой момент — задавать правильные вопросы ;))

person hakre    schedule 19.07.2012
comment
Спасибо за ваш ответ, но я видел, что функция setUsername должна быть с аргументом $username, проблема в том, что моя пользовательская функция setUsername не может иметь этот аргумент, как он определен, поэтому я не вижу, что я могу сделать . - person Reveclair; 20.07.2012
comment
@Reveclaire определяет как setUsername($username = null)... думал, что это уродливо. - person meze; 20.07.2012
comment
@Reveclaire: Когда вы реализуете интерфейс, вам нужно заполнить это точное определение. Если не можете, не реализуйте интерфейс. Вместо этого вы ничего не можете сделать. Лучше предпочесть предупреждение из-за отсутствующего параметра, чем фатальную ошибку, которая, вероятно, не будет правильно реализована. Также подумайте о том, чтобы более внимательно посмотреть, почему вы реализуете здесь неправильно. У вас может быть ошибка, которую вы еще не видите, и вы думаете, что столкнулись с техническим нарушением (только). Также лучше пересмотреть свой дизайн. - person hakre; 20.07.2012