2017-02-05 4 views
0

Im using Symfony 2.8.x и FOSUserBundle.FOSUserBundle extend RegisterForm

Я пытаюсь расширить мой пользователя с несколькими полями, как фамилия и имя ... Я делаю это, как говорится в документе https://symfony.com/doc/master/bundles/FOSUserBundle/overriding_forms.html

Когда я пытаюсь зарегистрировать следующее сообщение приходит

Neither the property "name" nor one of the methods "getName()", "name()", "isName()", "hasName()", "__get()" exist and have public access in class "AppBundle\Entity\User" 

Это моя регистрация класса

<?php 
namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class RegistrationType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name'); 
    } 

    public function getParent() 
    { 
     return 'FOS\UserBundle\Form\Type\RegistrationFormType'; 

     // Or for Symfony < 2.8 
     // return 'fos_user_registration'; 
    } 

    public function getBlockPrefix() 
    { 
     return 'app_user_registration'; 
    } 

    // For Symfony 2.x 
    public function getName() 
    { 
     return $this->getBlockPrefix(); 
    } 
} 

и это мой Пользователь Класс

<?php 
// src/AppBundle/Entity/User.php 

namespace AppBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
    /** 
    * @ORM\Column(type="string", length=255) 
    * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"}) 
    * @Assert\Length(
    *  min=3, 
    *  max=255, 
    *  minMessage="The name is too short.", 
    *  maxMessage="The name is too long.", 
    *  groups={"Registration", "Profile"} 
    *) 
    * 
    */ 
    protected $name; 
    /** 
    * @ORM\Column(type="string", length=255) 
    * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"}) 
    * @Assert\Length(
    *  min=3, 
    *  max=255, 
    *  minMessage="The name is too short.", 
    *  maxMessage="The name is too long.", 
    *  groups={"Registration", "Profile"} 
    *) 
    * 
    */ 

    protected $firstname; 
    /** 
    * @ORM\Column(type="integer") 
    */ 
    protected $mentorid; 

    public function __construct() 
    { 
     parent::__construct(); 
     // your own logic 
    } 
} 

Может ли кто-нибудь помочь мне с этой проблемой?

С уважением

ответ

0

Вы пытались добавить сеттер и геттер для поля «имя»? Использование, например, доктрины: сгенерируйте: сущности YourBundleName

+0

я пытался добавить сеттер в User.php и в RegistrationType.php. Оба не работали или не создали новую ошибку. – Anutrof

+0

Это типичная ошибка, а это означает, что у вас нет геттера для этого поля в классе сущностей. Итак, добавьте публичный геттер в «AppBundle \ Entity \ User», и если ваш код не будет работать, напишите полный код класса сущности здесь. –

+0

Я перезапустил сервер, и теперь похоже, что он работает, но я не могу зарегистрироваться. – Anutrof

0

Вам действительно нужно делать то, что предлагает Андрей. Вам нужно сгенерировать сеттеры и геттеры для ваших полей. Вы можете сделать это вручную, но я бы сказал, что безопаснее начинать с автоматического создания методов, которые впоследствии вы можете настроить по мере необходимости. Вам необходимо запустить

php app/console doctrine:generate:entities AppBundle/Entity/User 

См http://symfony.com/doc/current/doctrine.html#generating-getters-and-setters для более подробной информации