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
Вот моя сущность Комментарий:
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;
Я использую Symfony2.3. Любая помощь будет оценена.
3 ответа
Вы не можете изменять защищенные свойства снаружи объекта. Вам нужна публичная собственность или сеттер для этого.
class Comment
{
// ...
public function setUser(User $user)
{
$this->user = $user;
}
}
И в контроллере вы можете написать:
$comment->setUser($this->getUser());
Этот вопрос не имеет отношения к Symfony2, сначала вы должны прочитать о типах php, особенно об объектах. читай здесь и потом здесь
Вы должны понимать, как работает видимость. После этого вы поймете, что доступ к защищенным / закрытым свойствам объекта доступен только из самого объекта, поэтому вам нужно создать публичный метод
setUser($user) {
$this->user = $user;
}
Я всегда использую защищенный. Если я хочу изменить переменную или принять значение, я использую метод получения и установки:
public function setUser($user) {
$this->user = $user;
}
public function getUser(){
return $this->user;
}