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