2016-06-04 30 views
0

Wie kann ich den Benutzer des geschützten Objekts einstellen? Nach dem Ausfüllen des Formulars muss ich Benutzerobjekt mit aktuellen Benutzerdaten hinzufügen (zum Beispiel Speichern von Kommentaren). Ich habe versucht, so etwas wie das:symfony2 - Wert zum geschützten Objekt hinzufügen

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

Und Ich habe diese Fehler bekam

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

Hier ist mein Kommentar Einheit:

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; 

ich Symfony2.3 bin mit. Jede Hilfe wird geschätzt.

+0

die Optionen sind entweder öffentlich zu machen oder einen Setter ('setUser ($ user)') verwenden und dass in Ihrem Controller nennen. Sie könnten die Reflexion verwenden, aber das wäre für diese Situation zu viel. – qooplmao

Antwort

2

Sie können geschützte Eigenschaften nicht von außerhalb des Objekts ändern. Sie benötigen dafür eine öffentliche Eigenschaft oder einen Setter.

class Comment 
{ 
    // ... 

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

Und in einem Controller können Sie schreiben:

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

Diese Frage nicht zu Symfony2, zunächst verwandt Sie PHP-Typen, vor allem über die Objekte lesen sollte. read here und dann here

Sie sollten verstehen, wie Visibility funktioniert. Danach werden Sie, dass der Zugang zu geschützten/privaten Eigenschaften des Objekts verstehen sind nur von dem Objekt zur Verfügung selbst, so müssen Sie öffentliche Methode

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

ich immer verwenden geschützt erstellen, wenn ich will, bearbeiten Variable oder nehmen die Wert, verwende ich die Getter und Setter:

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

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