在 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