在 symfony 2.7 中将电话字段添加到 FOSUserBundle
Add telephone field to FOSUserBundle in symfony 2.7
您好,我正在尝试将新字段(电话)添加到我的 FOS 用户包注册表中。但是我没有得到这个字段,而是遇到了这个问题。
Method "telephone" for object "Symfony\Component\Form\FormView" does
not exist in FOSUserBundle:Registration:register_content.html.twig at
line 32
我正在尝试覆盖自定义模板并添加新的电话字段(需要自定义以添加一些样式....)。
\app\Resources\FOSUserBundle\views\Registration\register_content.html.twig
这是我的 'register_content.html.twig' 模板,
{% trans_default_domain 'FOSUserBundle' %}
<div class="container">
<h1 style="text-align: center;">Register a User</h1>
<br>
{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register form-horizontal'}}) }}
{# {{ form_widget(form) }}#}
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Username</label>
<div class="col-sm-4">
{{ form_widget(form.username, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors(form.username) }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
<div class="col-sm-4">
{{ form_widget(form.email, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors(form.email) }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Telephone</label>
<div class="col-sm-4">
{{ form_widget(form.telephone, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors(form.telephone) }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Password</label>
<div class="col-sm-4">
{{ form_widget (form.plainPassword.first, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors (form.plainPassword.first) }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Repeat password</label>
<div class="col-sm-4">
{{ form_widget (form.plainPassword.second, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors (form.plainPassword.second) }}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-default" value="{{ 'registration.submit'|trans }}" />
</div>
</div>
{{ form_end(form) }}
</div>
这是我的用户实体,
<?php
// src/AppBundle/Entity/User.php
namespace AdminBundle\Entity;
use FOS\UserBundle\Model\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;
/**
* @var string
*
* @ORM\Column(name="telephone", type="text", length=30, nullable=false)
*/
private $telephone;
/**
* Set nonotification
*
* @param text $telephone
* @return User
*/
public function settelephone($telephone) {
$this->telephone = $telephone;
return $this;
}
/**
* Get telephone
*
* @return text
*/
public function gettelephone() {
return $this->telephone;
}
public function __construct() {
parent::__construct();
// your own logic
}
}
FosUserBundle 提供的表单不知道您的新字段。
您应该使用您创建的额外字段添加一个表单类型。
示例:
class UserType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('Telephone');
// Other fields
}
public function getParent()
{
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
// Or for Symfony < 2.8
// return 'fos_user_registration';
}
// other methods needed setDefaultOptions() and getName()
您可以在官方文档中找到更多信息:http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_forms.html
您好,我正在尝试将新字段(电话)添加到我的 FOS 用户包注册表中。但是我没有得到这个字段,而是遇到了这个问题。
Method "telephone" for object "Symfony\Component\Form\FormView" does not exist in FOSUserBundle:Registration:register_content.html.twig at line 32
我正在尝试覆盖自定义模板并添加新的电话字段(需要自定义以添加一些样式....)。 \app\Resources\FOSUserBundle\views\Registration\register_content.html.twig
这是我的 'register_content.html.twig' 模板,
{% trans_default_domain 'FOSUserBundle' %}
<div class="container">
<h1 style="text-align: center;">Register a User</h1>
<br>
{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register form-horizontal'}}) }}
{# {{ form_widget(form) }}#}
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Username</label>
<div class="col-sm-4">
{{ form_widget(form.username, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors(form.username) }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
<div class="col-sm-4">
{{ form_widget(form.email, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors(form.email) }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Telephone</label>
<div class="col-sm-4">
{{ form_widget(form.telephone, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors(form.telephone) }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Password</label>
<div class="col-sm-4">
{{ form_widget (form.plainPassword.first, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors (form.plainPassword.first) }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Repeat password</label>
<div class="col-sm-4">
{{ form_widget (form.plainPassword.second, { 'attr': {'class': 'form-control'} }) }}
{{ form_errors (form.plainPassword.second) }}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-default" value="{{ 'registration.submit'|trans }}" />
</div>
</div>
{{ form_end(form) }}
</div>
这是我的用户实体,
<?php
// src/AppBundle/Entity/User.php
namespace AdminBundle\Entity;
use FOS\UserBundle\Model\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;
/**
* @var string
*
* @ORM\Column(name="telephone", type="text", length=30, nullable=false)
*/
private $telephone;
/**
* Set nonotification
*
* @param text $telephone
* @return User
*/
public function settelephone($telephone) {
$this->telephone = $telephone;
return $this;
}
/**
* Get telephone
*
* @return text
*/
public function gettelephone() {
return $this->telephone;
}
public function __construct() {
parent::__construct();
// your own logic
}
}
FosUserBundle 提供的表单不知道您的新字段。 您应该使用您创建的额外字段添加一个表单类型。
示例:
class UserType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('Telephone');
// Other fields
}
public function getParent()
{
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
// Or for Symfony < 2.8
// return 'fos_user_registration';
}
// other methods needed setDefaultOptions() and getName()
您可以在官方文档中找到更多信息:http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_forms.html