FOSUserBundle添加属性

时间:2014-02-10 22:31:28

标签: symfony 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);
    }
}

但是当我尝试加载/ register路由或通过以下方式添加新用户时:     php app / console fos:user:create

Symfony回复我:     FatalErrorException:错误:在/Library/WebServer/Documents/sfprojects/quattro/src/Hu/UserBundle/Entity/User.php中调用未定义的函数Hu \ UserBundle \ Entity \ setFname()

构造函数有什么问题?我想念的是什么?

非常感谢,

2 个答案:

答案 0 :(得分:2)

setFname不是函数,但它是您班级中的方法。

因此要执行它,您需要使用$this->setFname($fname)

同样在构造函数中,你不应该运行像setter或getter这样的方法(如果它们除了set variable或get variable之外什么都不做)

您的构造函数应如下所示:

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

答案 1 :(得分:1)

commande“php app / console fos:user:create”使用实体User的setter来影响来自终端的数据输入(就像Forms使用它们来影响来自&lt;输入...&gt;标签)。 您可以为添加到User类的所有字段添加setter来解决此问题

例如:

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

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