Symfony 如何向我的 FOSUser 添加字段?
Symfony how could I add fields to my FOSUser?
我正在尝试向我的用户添加一个字段 'name',这就是我进行操作的方式
namespace User\UserBundle\Controller;
use FOS\UserBundle\Controller\RegistrationController as BaseController;
class DefaultController extends BaseController
{
public function indexAction()
{
$response = parent::registerAction();
// ... do custom stuff
return $response;
}
这是我的用户类型
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->add('nom')
->add('prenom')
;
}
当我尝试添加时,
{{ form_widget(form.name) }}
我收到这个错误
Method "nom" for object "Symfony\Component\Form\FormView" does not exist in FOSUserBundle:Registration:register.html.twig at line
This is my user class
namespace User\UserBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255, nullable=true )
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="prenom", type="string", length=255, nullable=true )
*/
private $prenom;
/**
* Set nom
*
* @param string $nom
* @return User
*/
public function setNom($nom)
{
$this->nom = $nom;
return $this;
}
/**
* Get nom
*
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* Set prenom
*
* @param string $prenom
* @return User
*/
public function setPrenom($prenom)
{
$this->prenom = $prenom;
return $this;
}
/**
* Get prenom
*
* @return string
*/
public function getPrenom()
{
return $this->prenom;
}
}
这是我在 app/config 下的内容
enter image description here
我还应该做什么?有什么建议吗?我是 FOSUserBundle 的新手。谢谢
您似乎在尝试将 nom 和 prenom 字段添加到注册表中。因此,您需要覆盖 FOSUserBundle 注册表格。按照 Overriding Default FOSUserBundle Forms 中的指南进行操作,其中显示了如何覆盖任何表单。
也许这篇link会对你有所帮助http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_forms.html
This is my config.yml
你都写在config.yml里吗?
您需要在config.yml中编写此代码:
fos_user:
db_driver: orm
firewall_name: main
user_class: User\UserBundle\Entity\User
registration:
form:
type: user_userbundle_user
剩下的写在./config/services.yml
services:
fos_user.doctrine_registry:
alias: doctrine
app.form.registration:
class: UserUserBundle\Form\UserType
tags:
- { name: form.type, alias: user_userbundle_user }
所以我终于明白了!我将构造添加到我的 userType
public function __construct($class)
{
parent::__construct($class);
}
这是我的新 services.yml
parameters:
user_user.registration.class: User\UserBundle\Entity\User
services:
user.form.user:
class: User\UserBundle\Form\UserType
arguments: [%user_user.registration.class%]
tags:
- { name: form.type, alias: user_userbundle_user }
就是这些了,希望对大家有所帮助。谢谢大家
我正在尝试向我的用户添加一个字段 'name',这就是我进行操作的方式
namespace User\UserBundle\Controller;
use FOS\UserBundle\Controller\RegistrationController as BaseController;
class DefaultController extends BaseController
{
public function indexAction()
{
$response = parent::registerAction();
// ... do custom stuff
return $response;
}
这是我的用户类型
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->add('nom')
->add('prenom')
;
}
当我尝试添加时,
{{ form_widget(form.name) }}
我收到这个错误
Method "nom" for object "Symfony\Component\Form\FormView" does not exist in FOSUserBundle:Registration:register.html.twig at line
This is my user class
namespace User\UserBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255, nullable=true )
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="prenom", type="string", length=255, nullable=true )
*/
private $prenom;
/**
* Set nom
*
* @param string $nom
* @return User
*/
public function setNom($nom)
{
$this->nom = $nom;
return $this;
}
/**
* Get nom
*
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* Set prenom
*
* @param string $prenom
* @return User
*/
public function setPrenom($prenom)
{
$this->prenom = $prenom;
return $this;
}
/**
* Get prenom
*
* @return string
*/
public function getPrenom()
{
return $this->prenom;
}
}
这是我在 app/config 下的内容
enter image description here
我还应该做什么?有什么建议吗?我是 FOSUserBundle 的新手。谢谢
您似乎在尝试将 nom 和 prenom 字段添加到注册表中。因此,您需要覆盖 FOSUserBundle 注册表格。按照 Overriding Default FOSUserBundle Forms 中的指南进行操作,其中显示了如何覆盖任何表单。
也许这篇link会对你有所帮助http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_forms.html
This is my config.yml
你都写在config.yml里吗?
您需要在config.yml中编写此代码:
fos_user:
db_driver: orm
firewall_name: main
user_class: User\UserBundle\Entity\User
registration:
form:
type: user_userbundle_user
剩下的写在./config/services.yml
services:
fos_user.doctrine_registry:
alias: doctrine
app.form.registration:
class: UserUserBundle\Form\UserType
tags:
- { name: form.type, alias: user_userbundle_user }
所以我终于明白了!我将构造添加到我的 userType
public function __construct($class)
{
parent::__construct($class);
}
这是我的新 services.yml
parameters:
user_user.registration.class: User\UserBundle\Entity\User
services:
user.form.user:
class: User\UserBundle\Form\UserType
arguments: [%user_user.registration.class%]
tags:
- { name: form.type, alias: user_userbundle_user }
就是这些了,希望对大家有所帮助。谢谢大家