我用我的自定义用户实体扩展了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()
构造函数有什么问题?我想念的是什么?
非常感谢,
答案 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;
}