2015-05-12 2 views
0

, когда я пытаюсь упорствовать свой объект и смывать его, я получаю сообщение об ошибке:Symfony2 Установка Ошибка «Предупреждение: spl_object_hash() ожидает параметр ...»

Предупреждение: spl_object_hash() ожидает параметр 1, чтобы быть объект, целое дано 500 Внутренняя ошибка сервера - ContextErrorException

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

Ниже мой код упорствовать класс пользователей:

$package = $em->getRepository('MyBundle:Package')->findOneBy(array('id' => 1)); 
$new_user->addPackage($package); 

$role = $em->getRepository('MyBundle:Role')->findOneBy(array('id' => 3)); 
$new_user->addRole($role); 

$new_user->setCmsPrize(2); //int 
$new_user->setCmsBet(3); //int 
$new_user->setName("new user"); 
$new_user->setUserName("test123"); 
$new_user->setPassword("abc"); 
$new_user->setCreditLimit(1000); 
$new_user->setCreditBalance(2000); 
$new_user->setSelectedPackage($currentuser->getSelectedPackage()); 
$new_user->setParentId($currentuser->getId()); 
$new_user->setLayer($currentuser->getLayer() + 1); 
$em->persist($new_user); 
$em->flush(); 

Ниже мой пользовательский класс:

/** 
* MyBundle\Entity\User 
* 
* @ORM\Table(name="") 
* @ORM\Entity(repositoryClass="MyBundle\Entity\UserRepository") 
*/ 
class User implements AdvancedUserInterface, \Serializable { 

    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string", length=25, unique=true) 
    */ 
    private $username; 

    /** 
    * @ORM\Column(type="string", length=64, options={"fixed" = true})) 
    */ 
    private $password; 

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

    /** 
    * @ORM\OneToMany(targetEntity="User", mappedBy="parent_id") 
    * */ 
    private $children; 

    /** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="children") 
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true) 
    * 
    */ 
    private $parent_id; 

    /** 
    * @ORM\Column(name="layer", type="integer") 
    */ 
    private $layer; 

    /** 
    * @ORM\Column(name="credit_limit", type="float") 
    */ 
    private $credit_limit; 

    /** 
    * @ORM\Column(name="credit_balance", type="float") 
    */ 
    private $credit_balance; 

    /** 
    * @ORM\Column(name="cms_bet", type="integer") 
    */ 
    private $cms_bet; 

    /** 
    * @ORM\Column(name="cms_prize", type="integer") 
    */ 
    private $cms_prize; 

    /** 
    * @ORM\OneToOne(targetEntity="OneToOnePackage", inversedBy="users") 
    * @ORM\JoinColumn(name="selected_package", referencedColumnName="id") 
    */ 
    private $selected_package; 

    /** 
    * @ORM\Column(name="is_allow_open_acc", type="boolean") 
    */ 
    private $is_allow_open_acc; 

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

    /** 
    * @ORM\Column(name="created_at", type="datetime") 
    */ 
    private $created_at; 

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

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

    public function __construct() { 
     //$this->isActive = true; 
     $this->roles = new ArrayCollection(); 
     $this->packages = new ArrayCollection(); 
     $this->created_at = new \DateTime('NOW');//date('Y-m-d H:i:s'); 
     $this->credit_balance = 0; 
     $this->credit_limit = 0; 
     $this->status = 'ACTIVE'; 
     $this->is_allow_open_acc = true; 
     $this->children = new ArrayCollection(); 
     // may not be needed, see section on salt below 
     // $this->salt = md5(uniqid(null, true)); 
    } 

    /** 
    * @inheritDoc 
    */ 
    public function getUsername() { 
     return $this->username; 
    } 

    /** 
    * @inheritDoc 
    */ 
    public function getSalt() { 
     // you *may* need a real salt depending on your encoder 
     // see section on salt below 
     return null; 
    } 

    /** 
    * @inheritDoc 
    */ 
    public function getPassword() { 
     return $this->password; 
    } 

    /** 
    * @inheritDoc 
    */ 
    public function getRoles() { 
     return $this->roles->toArray(); 
    } 

    /** 
    * @inheritDoc 
    */ 
    public function eraseCredentials() { 

    } 

    /** 
    * @see \Serializable::serialize() 
    */ 
    public function serialize() { 
     return serialize(array(
      $this->id, 
      $this->username, 
      $this->password, 
      $this->name, 
      $this->is_allow_open_acc, 
      $this->created_at, 
      $this->credit_balance, 
      $this->credit_limit, 
      $this->parent_id, 
      $this->status, 
      $this->cms_bet, 
      $this->cms_prize, 
       // see section on salt below 
       // $this->salt, 
     )); 
    } 

    /** 
    * @see \Serializable::unserialize() 
    */ 
    public function unserialize($serialized) { 
     list (
       $this->id, 
       $this->username, 
       $this->password, 
       $this->name, 
       $this->is_allow_open_acc, 
       $this->created_at, 
       $this->credit_balance, 
       $this->credit_limit, 
       $this->parent_id, 
       $this->status, 
       $this->cms_bet, 
       $this->cms_prize, 
       // see section on salt below 
       // $this->salt 
       ) = unserialize($serialized); 
    } 

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

    /** 
    * Set username 
    * 
    * @param string $username 
    */ 
    public function setUsername($username) { 
     $this->username = $username; 
    } 

    /** 
    * Set password 
    * 
    * @param string $password 
    */ 
    public function setPassword($password) { 
     $this->password = $password; 
    } 

    /** 
    * Get isActive 
    * 
    * @return boolean 
    */ 
    public function getIsActive() { 
     if ($this->status == 'ACTIVE') { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public function isAccountNonExpired() { 
     return true; 
    } 

    public function isAccountNonLocked() { 
     return true; 
    } 

    public function isCredentialsNonExpired() { 
     return true; 
    } 

    public function isEnabled() { 
     return $this->getIsActive(); 
    } 

    /** 
    * Add roles 
    * 
    * @param \MyBundle\Entity\Role $roles 
    */ 
    public function addRole(\MyBundle\Entity\Role $roles) { 
     $this->roles[] = $roles; 
    } 

    /** 
    * Remove roles 
    * 
    * @param \MyBundle\Entity\Role $roles 
    */ 
    public function removeRole(\MyBundle\Entity\Role $roles) { 
     $this->roles->removeElement($roles); 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * @return User 
    */ 
    public function setName($name) { 
     $this->name = $name; 

     return $this; 
    } 

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

    /** 
    * Set parent_id 
    * 
    * @param integer $parentId 
    */ 
    public function setParentId($parentId) { 
     $this->parent_id = $parentId; 
    } 

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

    /** 
    * Set credit_limit 
    * 
    * @param float $creditLimit 
    */ 
    public function setCreditLimit($creditLimit) { 
     $this->credit_limit = $creditLimit; 
    } 

    /** 
    * Get credit_limit 
    * 
    * @return float 
    */ 
    public function getCreditLimit() { 
     return $this->credit_limit; 
    } 

    /** 
    * Set credit_balance 
    * 
    * @param float $creditBalance 
    */ 
    public function setCreditBalance($creditBalance) { 
     $this->credit_balance = $creditBalance; 
    } 

    /** 
    * Get credit_balance 
    * 
    * @return float 
    */ 
    public function getCreditBalance() { 
     return $this->credit_balance; 
    } 

    /** 
    * Set is_allow_open_acc 
    * 
    * @param boolean $isAllowOpenAcc 
    */ 
    public function setIsAllowOpenAcc($isAllowOpenAcc) { 
     $this->is_allow_open_acc = $isAllowOpenAcc; 
    } 

    /** 
    * Get is_allow_open_acc 
    * 
    * @return boolean 
    */ 
    public function getIsAllowOpenAcc() { 
     return $this->is_allow_open_acc; 
    } 

    /** 
    * Set status 
    * 
    * @param string $status 
    */ 
    public function setStatus($status) { 
     $this->status = $status; 
    } 

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

    /** 
    * Set created_at 
    * 
    * @param \DateTime $createdAt 
    */ 
    public function setCreatedAt($createdAt) { 
     $this->created_at = $createdAt; 
    } 

    /** 
    * Get created_at 
    * 
    * @return \DateTime 
    */ 
    public function getCreatedAt() { 
     return $this->created_at; 
    } 

    /** 
    * Set layer 
    * 
    * @param integer $layer 
    * @return User 
    */ 
    public function setLayer($layer) { 
     $this->layer = $layer; 

     return $this; 
    } 

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

    /** 
    * Set selected_package 
    * 
    * @param integer $selectedPackage 
    * @return User 
    */ 
    public function setSelectedPackage($selectedPackage) { 
     $this->selected_package = $selectedPackage; 

     return $this; 
    } 

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

    /** 
    * Add children 
    * 
    * @param \MyBundle\Entity\User $children 
    * @return User 
    */ 
    public function addChild(\MyBundle\Entity\User $children) { 
     $this->children[] = $children; 

     return $this; 
    } 

    /** 
    * Remove children 
    * 
    * @param \MyBundle\Entity\User $children 
    */ 
    public function removeChild(\MyBundle\Entity\User $children) { 
     $this->children->removeElement($children); 
    } 

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

    /** 
    * Add package 
    * 
    * @param \MyBundle\Entity\Package $package 
    * @return User 
    */ 
    public function addPackage(\MyBundle\Entity\Package $package) { 
     $this->packages[] = $package; 

     return $this; 
    } 

    /** 
    * Remove package 
    * 
    * @param \MyBundle\Entity\Package $package 
    */ 
    public function removePackage(\MyBundle\Entity\Package $package) { 
     $this->packages->removeElement($package); 
    } 

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

    /** 
    * Set packages 
    * 
    * @param Collection $packages 
    * @return User 
    */ 
    public function setPackages($packages) { 
     $this->packages = $packages; 

     return $this; 
    } 

    /** 
    * Set cms_bet 
    * 
    * @param integer $cmsBet 
    * @return User 
    */ 
    public function setCmsBet($cmsBet) { 
     $this->cms_bet = $cmsBet; 

     return $this; 
    } 

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

    /** 
    * Set cms_prize 
    * 
    * @param integer $cmsPrize 
    * @return User 
    */ 
    public function setCmsPrize($cmsPrize) { 
     $this->cms_prize = $cmsPrize; 

     return $this; 
    } 

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

} 

Ниже свалка загруженного объекта пользователя (текущий пользователь): enter image description here

Ниже дамп нового объекта пользователя: enter image description here

Журнал ошибок:

CRITICAL - Uncaught PHP Exception Symfony \ Component \ Debug \ Exception \ ContextErrorException: «Внимание: spl_object_hash() ожидает, что параметр 1 будет объектом, целое число задано « C: \ xampp \ htdocs \ project \ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ UnitOfWork.php строка 1389

Другая вещь, которую я вижу, - это тип данных переменной $ child, $ role и $ packages. Разве это не так? Для переменной child я ничего не установил, потому что он не принадлежит переменной к базе данных. Это только для использования для саморегуляции, $ parent_id имеет отношения для самореференции с этим $ child, поэтому я устанавливаю $ parent_id.

Я действительно понятия не имел, возможно, у меня есть неправильная концепция о самореференции.

Благодарим за помощь.

+0

Проверьте свой журнал под /app/log/dev.log, что такое ошибка 500? Решение этого ответа лежит там! –

+0

Привет @MichaelVilleneuve, я только что добавил в журнал, но мне это не помогает. Может, я взял неправильные журналы? – overshadow

ответ

5

Глядя на аннотации, я думаю, что User :: setParentId() ожидает объект пользователя, не является целым числом:

/** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="children") 
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true) 
    * 
    */ 

Так вместо передачи

$new_user->setParentId($currentuser->getId()); 

попробовать:

$new_user->setParentId($currentuser); 

Если это работает, имя поля должно быть соответствующим образом изменено на нечто вроде родителя вместо пар. ent_id.

+0

Кажется, что правильный ответ, за исключением того, что я не буду изменять имя поля, так как он в db будет 'parent_id'. Я просто изменил бы имя метода на 'setParent'. –

+0

@ Дэнни Кэссиди, это действительно работает! Большое спасибо, вы спасли мой день. Я тоже попробовал это, но это также дало мне ошибку, но теперь успешно. В любом случае, очень большое спасибо. – overshadow

+0

@HonzaHaering, вы имеете в виду изменить setParentId() на setParent(), чтобы сделать его более логичным? – overshadow

Смежные вопросы