有点晚了,但也许这个答案会对某人有所帮助。
您可以做的一件事是传递单个 $subject 对象的值实例数组。
例如,在 Twig 中,您将函数用作:
{% set data = { 'subject': yourRealSubject, 'compared_object': comparedObject } %}
{% if is_granted('can_edit', data) %}
...
...
{% endif %}
(您可以从 PHP 代码中执行相同的操作)。
那么在你的选民中:
class MyVoter extends Voter{
// ...
protected function voteOnAttribute($attribute, $data, TokenInterface $token) {
$subject = isset($data['subject']) ? $data['subject'] : null;
$comparedObject = isset($data['compared_object']) ? $data['compared_object'] : null;
if(!$subject || !$subject instanceof \Namespace\To\Subject){
throw new Exception('Missing or invalid subject!!!'');
}
// do whatever you want ...
}
}