2016-06-04 2 views
0

보호 오브젝트 사용자를 어떻게 설정할 수 있습니까? 양식을 작성한 후 현재 사용자 데이터 (예 : 주석 저장과 같은)로 사용자 객체를 추가해야합니다. 나는 그 같은 시도 :symfony2 - 보호 오브젝트에 값 추가

if ($form->isValid()) { 
     $comment = $form->getData(); 
     $comment->user = $this->contextSecurity->getToken()->getUser(); 
     $this->model->save($comment); 
    } 

을 그리고 난 다음이 오류를

FatalErrorException: Error: Cannot access protected property AppBundle\Entity\Comment::$user in /home/AppBundle/Controller/CommentsController.php line 184 

있어 내 의견 엔티티했습니다 : 나는 Symfony2.3을 사용하고

class Comment 
{ 
    /** 
    * Id. 
    * 
    * @ORM\Id 
    * @ORM\Column(
    *  type="integer", 
    *  nullable=false, 
    *  options={ 
    *   "unsigned" = true 
    *  } 
    *) 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    * 
    * @var integer $id 
    */ 
    private $id; 

    /** 
    * Content. 
    * 
    * @ORM\Column(
    *  name="content", 
    *  type="string", 
    *  length=250, 
    *  nullable=false 
    *) 
    * @Assert\NotBlank(groups={"c-default"}) 
    * @Assert\Length(min=3, max=250, groups={"c-default"}) 
    * 
    * @var string $content 
    */ 
    private $content; 

    /** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="comments") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false) 
    */ 
    protected $user; 

. 어떤 도움을 주시면 감사하겠습니다.

+0

옵션은 public으로 설정하거나 setter ('setUser ($ user)')를 사용하여 컨트롤러에서 호출합니다. 귀하의 반사를 사용할 수 있지만이 상황에 대한 잔인한 것입니다. – qooplmao

답변

2

개체 외부에서 보호 된 속성을 수정할 수 없습니다. 공공 재산이나 세터가 필요합니다.

class Comment 
{ 
    // ... 

    public function setUser(User $user) 
    { 
     $this->user = $user; 
    } 
} 

그리고 컨트롤러에 당신은 쓸 수 있습니다 :

$comment->setUser($this->getUser()); 
1

이 질문 Symfony2 관련이 없습니다, 먼저, 특히 개체에 대한, PHP는 유형에 대해 읽어야에. read here 다음 here

Visibility의 작동 방식을 이해해야합니다. 그 후 당신은 개체 자체 만 사용할 수있는 개체의 보호/개인 속성에 대한 액세스를 이해한다, 그래서 당신은 항상 보호 사용하십시오 공공 방법을

setUser($user) { 
    $this->user = $user; 
} 
0

를 작성, 내가 편집 변수를 원하는 경우 또는를 취할 필요 값을 사용하면 getter와 setter를 사용합니다 :

public function setUser($user) { 
    $this->user = $user; 
} 

public function getUser(){ 
    return $this->user; 
}