2017-03-02 9 views
0

Symfony 2.8 및 FosUserBundle을 사용하고 있습니다. 나는 내 엔터티에 새로운 속성을 추가 할 수 없다는 문제점이있다. 내 법인 사용자는FosUserBundle 테이블 및 폼에 열 추가 Symfony 2.8

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

namespace AppBundle\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; 

    /** 
    * @ORM\name 
    * @ORM\Column(type="VARCHAR") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $name; 

    /** 
    * @ORM\lastname 
    * @ORM\Column(type="VARCHAR") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $lastname; 

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

    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    public function setLastname($lastname) 
    { 
     $this->lastname = $lastname; 

     return $this; 
    } 
} 

처럼 보인다하지만 난 항상 오류를 얻을 : "AnnotationException.php 라인 AnnotationException 54 : [의미 론적 오류] 주석은"속성 @Doctrine \ ORM \ 매핑 \ 이름 " AppBundle \ Entity \ User :: $ name이 없거나 자동로드 할 수 없습니다. "

내 RegistrationFormType이 도움이 되었기 때문에 도움이 될지도 모릅니다.

<?php 

/* 
* This file is part of the FOSUserBundle package. 
* 
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/> 
* 
* For the full copyright and license information, please view the LICENSE 
* file that was distributed with this source code. 
*/ 

namespace FOS\UserBundle\Form\Type; 

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

class RegistrationFormType extends AbstractType 
{ 
    private $class; 

    /** 
    * @param string $class The User class name 
    */ 
    public function __construct($class) 
    { 
     $this->class = $class; 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('username', null, array('label' => 'form.username', 'translation_domain' => 'FOSUserBundle')) 
      ->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle')) 
      ->add('plainPassword', 'repeated', array(
       'type' => 'password', 
       'options' => array('translation_domain' => 'FOSUserBundle'), 
       'first_options' => array('label' => 'form.password'), 
       'second_options' => array('label' => 'form.password_confirmation'), 
       'invalid_message' => 'fos_user.password.mismatch', 
      )) 
      ->add('name') 
      ->add('lastname') 
     ; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => $this->class, 
      'intention' => 'registration', 
     )); 
    } 

    public function getName() 
    { 
     return 'fos_user_registration'; 
    } 
} 

MySQL에서 수동으로 필드 이름과 성을 모두 추가했습니다.

어떤 파일을 수정하지 않았습니까? 엔터티 정의 또한

namespace AppBundle\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; 

    /** 
    *@var string 
    * 
    * @ORM\Column(name="name",type="string") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="lastname",type="string") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $lastname; 

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

    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

     public function getName() 
    { 
     return $this->name; 
    } 

    public function setLastname($lastname) 
    { 
     $this->lastname = $lastname; 

     return $this; 
    } 
     public function getLastname() 
    { 


     return $this->lastname ; 
    } 

} 

당신이 새를 만들 번들 오히려에서 FOSUserbundle FormType을 편집 할 필요가 없습니다를 :

최고 감사합니다, 토마스

답변

0

나는 다음과 같은 해결해야한다고 생각 양식 유형은 사용자 클래스를 기반으로합니다.