symfony2 - 为受保护对象增加价值
symfony2 - add value to protected object
如何设置受保护对象用户?填写表格后,我必须使用当前用户数据添加用户对象(例如保存评论)。我试过类似的东西:
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。任何帮助将不胜感激。
您不能从对象外部修改受保护的属性。为此,您需要一个 public 属性 或 setter。
class Comment
{
// ...
public function setUser(User $user)
{
$this->user = $user;
}
}
在控制器中你可以这样写:
$comment->setUser($this->getUser());
这个问题与 Symfony2 无关,首先你应该阅读 php 类型,尤其是对象。 read here and then here
您应该了解 Visibility 的工作原理。之后你就会明白访问对象的 protected/private 属性只能从对象本身获得,所以你需要创建 public 方法
setUser($user) {
$this->user = $user;
}
我总是使用受保护的,如果我想编辑变量或取值,我使用 getter 和 setter:
public function setUser($user) {
$this->user = $user;
}
public function getUser(){
return $this->user;
}
如何设置受保护对象用户?填写表格后,我必须使用当前用户数据添加用户对象(例如保存评论)。我试过类似的东西:
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。任何帮助将不胜感激。
您不能从对象外部修改受保护的属性。为此,您需要一个 public 属性 或 setter。
class Comment
{
// ...
public function setUser(User $user)
{
$this->user = $user;
}
}
在控制器中你可以这样写:
$comment->setUser($this->getUser());
这个问题与 Symfony2 无关,首先你应该阅读 php 类型,尤其是对象。 read here and then here
您应该了解 Visibility 的工作原理。之后你就会明白访问对象的 protected/private 属性只能从对象本身获得,所以你需要创建 public 方法
setUser($user) {
$this->user = $user;
}
我总是使用受保护的,如果我想编辑变量或取值,我使用 getter 和 setter:
public function setUser($user) {
$this->user = $user;
}
public function getUser(){
return $this->user;
}