2017-07-03 16 views
0

當前我在用戶的地址。我想檢索已登錄的用戶以將新地址分配給此用戶。如何使用用戶地址實體的setUser()方法解決此問題

爲此我使用getUser()方法。

$user = $this->get('security.token_storage')->getToken()->getUser(); 

而在我的視圖中,當我轉儲轉儲的變量時,我發現它是檢索到的正確用戶。

Utilisateurs {#320 ▼ 
    #id: 31 
    -commandes: PersistentCollection {#345 ▶} 
    -adresses: PersistentCollection {#374 ▶} 
    #username: "Hasmiou" 
    #usernameCanonical: "hasmiou" 
    #email: "[email protected]" 
    #emailCanonical: "[email protected]" 
    #enabled: true 
    #salt: "tkkwpuzzykg4sksc8coo8048g448ooo" 
    #password: "$2y$13$tkkwpuzzykg4sksc8coo8uBC0haUd5f1UQqhbt5E59xN12/jFQb2S" 
    #plainPassword: null 
    #lastLogin: DateTime {#318 ▶} 
    #confirmationToken: null 
    #passwordRequestedAt: null 
    #groups: null 
    #locked: false 
    #expired: false 
    #expiresAt: null 
    #roles: [] 
    #credentialsExpired: false 
    #credentialsExpireAt: null 
} 

現在,當我繼續在發展,我用的是UserAddress()實體的SETUSER方法我返回的錯誤信息是:

Catchable Fatal Error: Argument 1 passed to Saresso\SaressoBundle\Entity\UtilisateurAdresse::setUtilisateur() must be an instance of Utilisateurs\UtilisateursBundle\Utilisateurs, instance of Utilisateurs\UtilisateursBundle\Entity\Utilisateurs given, called in C:\wamp64\www\Saresso\src\Saresso\SaressoBundle\Controller\PanierController.php on line 119 and defined 
500 Internal Server Error - ContextErrorException 

我甚至注意到這個錯誤,當我使用DataFixture包,我無法在UserAddress實體中預先註冊用戶。

這裏是實體UserAddress的代碼:

<?php 

namespace Saresso\SaressoBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* UtilisateurAdresse 
* 
* @ORM\Table(name="utilisateur_adresse") 
* @ORM\Entity(repositoryClass="Saresso\SaressoBundle\Repository\UtilisateurAdresseRepository") 
*/ 
class UtilisateurAdresse 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Saresso\SaressoBundle\Entity\Communes", inversedBy="adresses") 
    * @ORM\JoinColumn(nullable=false) 
    */ 
    protected $commune; 

    /** 
    *@ORM\ManyToOne(targetEntity="Utilisateurs\UtilisateursBundle\Entity\Utilisateurs", inversedBy="adresses") 
    * @ORM\JoinColumn(nullable=false) 
    */ 
    private $utilisateur; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="titreAdresse", type="string", length=255, nullable=true) 
    */ 
    private $titreAdresse; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="adresse", type="string", length=255, nullable=true) 
    */ 
    private $adresse; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="complement", type="string", length=255, nullable=true) 
    */ 
    private $complement; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="latAdresse", type="string", length=255, nullable=true) 
    */ 
    private $latAdresse; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="lonAdresse", type="string", length=255, nullable=true) 
    */ 
    private $lonAdresse; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="telephoneAdresse", type="string", length=255, nullable=true) 
    */ 
    private $telephoneAdresse; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set titreAdresse 
    * 
    * @param string $titreAdresse 
    * @return UtilisateurAdresse 
    */ 
    public function setTitreAdresse($titreAdresse) 
    { 
     $this->titreAdresse = $titreAdresse; 

     return $this; 
    } 

    /** 
    * Get titreAdresse 
    * 
    * @return string 
    */ 
    public function getTitreAdresse() 
    { 
     return $this->titreAdresse; 
    } 

    /** 
    * Set adresse 
    * 
    * @param string $adresse 
    * @return UtilisateurAdresse 
    */ 
    public function setAdresse($adresse) 
    { 
     $this->adresse = $adresse; 

     return $this; 
    } 

    /** 
    * Get adresse 
    * 
    * @return string 
    */ 
    public function getAdresse() 
    { 
     return $this->adresse; 
    } 

    /** 
    * Set complement 
    * 
    * @param string $complement 
    * @return UtilisateurAdresse 
    */ 
    public function setComplement($complement) 
    { 
     $this->complement = $complement; 

     return $this; 
    } 

    /** 
    * Get complement 
    * 
    * @return string 
    */ 
    public function getComplement() 
    { 
     return $this->complement; 
    } 

    /** 
    * Set latAdresse 
    * 
    * @param string $latAdresse 
    * @return UtilisateurAdresse 
    */ 
    public function setLatAdresse($latAdresse) 
    { 
     $this->latAdresse = $latAdresse; 

     return $this; 
    } 

    /** 
    * Get latAdresse 
    * 
    * @return string 
    */ 
    public function getLatAdresse() 
    { 
     return $this->latAdresse; 
    } 

    /** 
    * Set lonAdresse 
    * 
    * @param string $lonAdresse 
    * @return UtilisateurAdresse 
    */ 
    public function setLonAdresse($lonAdresse) 
    { 
     $this->lonAdresse = $lonAdresse; 

     return $this; 
    } 

    /** 
    * Get lonAdresse 
    * 
    * @return string 
    */ 
    public function getLonAdresse() 
    { 
     return $this->lonAdresse; 
    } 

    /** 
    * Set commune 
    * 
    * @param \Saresso\SaressoBundle\Entity\Communes $commune 
    * @return UtilisateurAdresse 
    */ 
    public function setCommune(\Saresso\SaressoBundle\Entity\Communes $commune) 
    { 
     $this->commune = $commune; 

     return $this; 
    } 

    /** 
    * Get commune 
    * 
    * @return \Saresso\SaressoBundle\Entity\Communes 
    */ 
    public function getCommune() 
    { 
     return $this->commune; 
    } 

    /** 
    * Set utilisateur 
    * 
    * @param \Utilisateurs\UtilisateursBundle\Utilisateurs $utilisateur 
    * @return UtilisateurAdresse 
    */ 
    public function setUtilisateur(\Utilisateurs\UtilisateursBundle\Utilisateurs $utilisateur) 
    { 
     $this->utilisateur = $utilisateur; 

     return $this; 
    } 

    /** 
    * Get utilisateur 
    * 
    * @return \Utilisateurs\UtilisateursBundle\Utilisateurs 
    */ 
    public function getUtilisateur() 
    { 
     return $this->utilisateur; 
    } 

    /** 
    * Set telephoneAdresse 
    * 
    * @param string $telephoneAdresse 
    * @return UtilisateurAdresse 
    */ 
    public function setTelephoneAdresse($telephoneAdresse) 
    { 
     $this->telephoneAdresse = $telephoneAdresse; 

     return $this; 
    } 

    /** 
    * Get telephoneAdresse 
    * 
    * @return string 
    */ 
    public function getTelephoneAdresse() 
    { 
     return $this->telephoneAdresse; 
    } 
} 

實體Utilisateur

<?php 
// src/Utilisateurs/UtilisateurBundle/Entity/Utilisateur.php 

namespace Utilisateurs\UtilisateursBundle\Entity; 

use FOS\UserBundle\Entity\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class Utilisateurs extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    public function __construct() 
    { 
     parent::__construct(); 
     // your own logic 
     $this-> commandes = new ArrayCollection(); 
     $this-> adresses = new ArrayCollection(); 
    } 

    /** 
    * @ORM\OneToMany(targetEntity="Saresso\SaressoBundle\Entity\Commandes", mappedBy="utilisateur", cascade={"remove"}) 
    * @ORM\JoinColumn(nullable=true) 
    */ 
    private $commandes; 

    /** 
    * @ORM\OneToMany(targetEntity="Saresso\SaressoBundle\Entity\UtilisateurAdresse", mappedBy="utilisateur", cascade={"remove"}) 
    * @ORM\JoinColumn(nullable=true) 
    */ 
    private $adresses; 

    /** 
    * Add commandes 
    * 
    * @param \Saresso\SaressoBundle\Entity\Commandes $commandes 
    * @return Utilisateurs 
    */ 
    public function addCommande(\Saresso\SaressoBundle\Entity\Commandes $commandes) 
    { 
     $this->commandes[] = $commandes; 

     return $this; 
    } 

    /** 
    * Remove commandes 
    * 
    * @param \Saresso\SaressoBundle\Entity\Commandes $commandes 
    */ 
    public function removeCommande(\Saresso\SaressoBundle\Entity\Commandes $commandes) 
    { 
     $this->commandes->removeElement($commandes); 
    } 

    /** 
    * Get commandes 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getCommandes() 
    { 
     return $this->commandes; 
    } 

    /** 
    * Add adresses 
    * 
    * @param \Saresso\SaressoBundle\Entity\Adresses $adresses 
    * @return Utilisateurs 
    */ 
    public function addAdress(\Saresso\SaressoBundle\Entity\Adresses $adresses) 
    { 
     $this->adresses[] = $adresses; 

     return $this; 
    } 

    /** 
    * Remove adresses 
    * 
    * @param \Saresso\SaressoBundle\Entity\Adresses $adresses 
    */ 
    public function removeAdress(\Saresso\SaressoBundle\Entity\Adresses $adresses) 
    { 
     $this->adresses->removeElement($adresses); 
    } 

    /** 
    * Get adresses 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getAdresses() 
    { 
     return $this->adresses; 
    } 
} 

PanierAdresse控制器

<?php 

namespace Saresso\SaressoBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Saresso\SaressoBundle\Entity\UtilisateurAdresse; 
use Saresso\SaressoBundle\From\UtilisateurAdresseType; 

class PanierController extends Controller { 

public function adresseAction() 
    { 
     $user = $this->get('security.token_storage')->getToken()->getUser(); 
     $entity= new UtilisateurAdresse(); //On instantie la table utilisateurAdresse 
     $form= $this->createForm(new UtilisateurAdresseType(), $entity); //On instantie le formulaire généré par le fichier UtilisateurAdresseType 


     //On verifie si le formulaire est posté par une method POST 
     if($this->get('request')->getMethod()=='POST') 
     { 
      $form->handleRequest($this->getRequest()); //On recupere le contenu du formulaire posté 

      //S'il est valide on flush le contenu 
      if($form->isValid()){ 
       $em = $this->getDoctrine()->getManager(); //On instantie l'entity manager 
       //$entity->setUtilisateur($this->get('security.token_storage')->getToken()->getUser()); //On definie l'utilisateur pour le quel on ajoute l'adresse 
       $entity->setUtilisateur($user); 
       $em->persist($entity); //On prepare la requete à l'aide de doctrine grace à l'entity manager 
       $em->flus(); //On insert maintent les données 

       return $this->redirect($this->generateUrl('adresse')); 
      } 
     } 
     return $this->render('SaressoSaressoBundle:Default:panierAdress.html.twig', array('utilisateur'=>$user, 
                          'entity'=>$entity, 
                          'form'=>$form->createView())); 
    } 

} 
+0

你得到一個$用戶,但這不是你應該爲你的二傳手。試試''user = $ this-> get('security.token_storage') - > getToken() - > getUser();'然後用'$ em-> getRepository(theRepo) - > find $ user-> getId())',告訴我它是否有效,我會做一個正確的答案 –

回答

0

貌似這個代碼中的類要改變UtilisateurAdresse需求:

/** 
* Set utilisateur 
* 
* @param \Utilisateurs\UtilisateursBundle\Entity\Utilisateurs $utilisateur 
* @return UtilisateurAdresse 
*/ 
public function setUtilisateur(\Utilisateurs\UtilisateursBundle\Entity\Utilisateurs $utilisateur) 
{ 
    $this->utilisateur = $utilisateur; 

    return $this; 
} 

添加了\Entity路徑。你可以嘗試 - 我認爲這是問題,但不確定?