2014-02-10 121 views
-1

我已經以這種方式與我的自定義用戶實體擴展FOSUserBundle: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應用程序/控制檯FOS:用戶:創建

的Symfony返回我: FatalErrorException:錯誤:調用未定義功能胡\ UserBundle \實體\ setFname()在/ Library/Web服務器/文件/ sfprojects /四驅車/ src目錄/胡/ UserBundle /實體/User.php

什麼是錯誤的構造函數?我想念什麼?

非常感謝,

回答

2

setFname不是功能,但它是在你的類方法。

所以要執行它,你需要使用$this->setFname($fname)

此外,在構造函數中,你不應該運行像setter和getter方法的方法(如果他們沒有做任何東西,除了一組變量或獲取變量)

你的構造應該是這樣的:

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

的commande「php app/console fos:user:create」使用實體User的setter來影響來自終端的數據輸入(與Forms使用它們影響數據到<輸入中的對象的方式一樣...>標籤 ) 。 您可以添加setter方法您添加到您的用戶類來解決這個問題

爲例的所有字段:

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

public function setFname($fname) { 
    $this->fname = $fname; 
}