2014-02-10 3 views
-1

я расширил FOSUserBundle с моими привычками пользователя Entity таким образом:FOSUserBundle добавить свойства

<?php 

namespace Hu\UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use FOS\UserBundle\Entity\User as BaseUser; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="fname", type="string", length=255) 
    * @Assert\NotBlank() 
    */ 
    private $fname; 

    // other fields... 


    /** 
    * Set fname 
    * 
    * @param string $fname 
    * @return UserEntity 
    */ 
    public function setFname($fname) 
    { 
     $this->fname = $fname; 

     return $this; 
    } 

    /** 
    * Get fname 
    * 
    * @return string 
    */ 
    public function getFname() 
    { 
     return $this->fname; 
    } 

    public function __construct() 
    { 
     parent::__construct(); 
     // ... 
     $this->fname = setFname($fname); 
    } 
} 

Но когда я пытаюсь загрузить зарегистрировать маршрут/или добавить новый пользователь по: PHP приложения/консоли ФОС: пользователь: создать

Symfony возвращает меня: FatalErrorException: Ошибка: Вызов неопределенной функции Ху \ UserBundle \ Entity \ setFname() в/Library/WebServer/Documents/sfprojects/QUATTRO/SRC/Hu/UserBundle/Entity /User.php

Что неправильно в конструкторе? Чего я скучаю?

Спасибо большое,

ответ

2

setFname не функция, но это метод в вашем классе.

поэтому для его выполнения вам необходимо использовать $this->setFname($fname).

Также в конструкторе вы не должны работать такие методы, как сеттеры или геттеров (если они не делают ничего, кроме множества переменной или получить переменную)

Ваш конструктор должен выглядеть следующим образом:

public function __construct() 
{ 
    parent::__construct(); 
    $this->fname = $fname; 
} 
1

в commande "php app/console fos: user: create" использует сеттеры объекта Пользователь влияет на ввод данных с терминала (таким же образом, что Forms использует их для воздействия на данные объекта с входа < ...> тег) . Вы можете добавить сеттеры для всех полей, добавленных в класс пользователя, чтобы решить эту проблему

Exemple:

/** 
* @var string 
* 
* @ORM\Column(name="fname", type="string", length=255) 
* @Assert\NotBlank() 
*/ 
private $fname; 

public function setFname($fname) { 
    $this->fname = $fname; 
} 
Смежные вопросы