2014-07-11 110 views
-1

我在symfony的第二天:-)我創建了實體,窗體和控制器「REGISTER USER」。我的表單將用戶添加到數據庫中,而不是其角色。symfony創建用戶和角色

我模仿此頁上:http://symfony.com/doc/current/cookbook/security/entity_provider.html

DB角色:

ID | NAME | ROLE 
1 | user | ROLE_USER 
2 | admin | ROLE_ADMIN 

DB USER_ROLE

USER_ID | ROLE_ID 
(EMPTY) 

這是我的代碼:

用戶

class User implements UserInterface, \Serializable { 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
//other fields 

    /** 
    * @ORM\ManyToMany(targetEntity="Role", inversedBy="users") 
    * 
    */ 
    private $roles; 

    public function __construct() 
    { 
     $this->roles = new ArrayCollection(); 
    } 
    //.... 
    public function getRoles() 
    { 
     return $this->roles->toArray(); 
    } 
    //.... 
} 

角色

class Role implements RoleInterface{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id() 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(name="name", type="string", length=30) 
    */ 
    private $name; 

    /** 
    * @ORM\Column(name="role", type="string", length=20, unique=true) 
    */ 
    private $role; 

    /** 
    * @ORM\ManyToMany(targetEntity="User", mappedBy="roles") 
    */ 
    private $users; 

    public function __construct() 
    { 
     $this->users = new ArrayCollection(); 
    } 

    /** 
    * @see RoleInterface 
    */ 
    public function getRole() 
    { 
     return $this->role; 
    } 
} 

和計件代碼控制器

$em = $this->getDoctrine()->getManager(); 

    $form = $this->createForm(new RegisterType); 


    $form->handleRequest($Request); 
    if($form->isValid()){ 
     $formData=$form->getData(); 
     if($formData['password']==$formData['repeatpassword']){ 
      $factory = $this->get('security.encoder_factory'); 
      $user = new User(); 
      $encoder = $factory->getEncoder($user); 
      $user->setSalt(md5(time())); 

      $pass = $encoder->encodePassword($formData['password'], $user->getSalt()); 
      $user->setEmail($formData['email']); 
      $user->setPassword($pass); 
      $user->setActive(1); 
      $user->setName($formData['name']); 
      $user->setSurname($formData['surname']); 
      $user->setCountry($formData['country']); 
      $user->setBirthdate($formData['birthdate']); 
      $user->setCity($formData['city']); 
      $user->setBirthdate($formData['birthdate']); 
      $user->setAddress($formData['address']); 
      $user->setPhone($formData['phone']); 
      $user->setZipcode($formData['zipcode']); 
      $em = $this->getDoctrine()->getEntityManager(); 
      $em->persist($user); 
      $em->flush(); 
     } 

我如何添加角色到用戶的?我想在參數中給出角色的id或名稱。

回答

0

你是彌補一個良好的開端,但這裏有你需要知道/接下來的步驟做:

This documentation將告訴你如何從數據庫中獲取的實體。 This documentation會告訴你如何保存一個相關的實體。

$user->setSalt(md5(time()));不安全;您應該參考 this documentation瞭解如何以安全的方式正確生成密碼。

您不應該手動綁定每個字段,而應該按照this documentation瞭解如何正確處理表單,並知道如何將實體綁定到FormType類。

+0

我的表單和查詢添加了用戶的作品...我知道這不是完美的,我會在這方面努力。目前我遇到添加用戶角色的問題。添加用戶後,我的基本user_role爲空。問題是,除了用戶和他的角色之外,如何改進添加的代碼。 – viko

+0

@viko我會照顧他先說的,它會讓你的生活和我們的生活更輕鬆,使它更簡單,幫助你,讓你的問題變得更簡單。 – Tek

+0

@viko你的問題和我的答案有你需要的所有信息,使你的應用程序以你想要的方式工作。如果您無法從所提供的信息中理解,那麼您可能不瞭解實體如何在Symfony中工作,因此我建議您閱讀[關於數據庫和原則的文檔](http://symfony.com/ DOC /電流/電子書/ doctrine.html)。 –