2016-10-12 7 views
1

Я использую избирателя, чтобы определить, может ли зарегистрированный пользователь редактировать данный объект. Один из критериев требует сравнения с другим объектом, но я не уверен, как передать это избирателю. Я не могу использовать аргументы конструктора, поскольку он не является предопределенным значением.Symfony2: передать второй объект избирателю

В основном я хотел бы сделать что-то вроде этого:

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

Любая помощь будет оценена.

ответ

0

Мое предложение состоит в том, чтобы создать дополнительное свойство «subject», где вы можете поставить «сравниваемый объект».

// 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... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^