我正在使用一个投票器来确定登录用户是否可以编辑给定的对象。其中一个条件需要与另一个对象进行比较,但是我不确定如何将其传递给选民。我不能使用构造函数参数,因为它不是预定义的值。

基本上我想做这样的事情:

 protected function voteOnAttribute($attribute, $subject, TokenInterface $token, $comparedObject)
            { if ($subject->getProperty1 == $comparedObject)
    {return true;}
    }


任何帮助,将不胜感激。

最佳答案

我的建议是创建“主题”的附加属性,在其中可以放置“比较对象”。

// Inside action.
public function myBestAction(Request $request)
{
   // My super code... e.g. we have received from ORM a $post.

   // Create property on the fly to put $comparedObject.
   // Perhaps creating property dynamically is not good practice, therefore you can create permanent with getter and setter.
   $post->comparedObject = $comparedObject;
   $this->isGranted('can_edit', $post);
}

// Now inside voter.
private function canEdit($subject)
{
   $comparedObject = $subject->comparedObject;

   // Compare $subject(post) with $comparedObject and return true or false...
}

07-24 18:35