Я внедряю избирателей в свою систему, и я не могу понять, как создать / расширить / внедрить более общий способ для избирателей.
У меня есть следующий избиратель (минимизированный):
class EventVoter extends Voter {
private $roleBaseName = 'ROLE_EVENT';
private $classname = Event::class;
private $ownershipMethod = 'getCreatedBy';
protected function supports($attribute, $subject) {
// Only vote on {$this->classname} objects
if (!$subject instanceof $this->classname) {
return false;
}
return true;
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token) {
// Check if you own this specific entry:
return $subject->{$this->ownershipMethod} === $user;
}
}
Этот работает нормально, как и .Однако, я также хочу один для Новостей, Пейдж, Навыков, Фу и Бар.
Я мог бы просто скопировать этого избирателя и изменить верхние переменные.Но так как это единственные 3 изменения, я хочу какой-то общий избиратель, который я могу загружать со значениями, например, при конструировании, в результате чего получается более твердый код с реальной логикой в одном месте.
Но если яРасширяйте класс Generic с помощью Voter, он автоматически загружает его.Я хочу, чтобы он игнорировал универсальный класс и в итоге получил что-то вроде:
class EventVoter extends GenericVoter
{
private $roleBaseName = 'ROLE_EVENT';
private $classname = Event::class;
private $ownershipMethod = 'getCreatedBy';
// Possibly, if required at all:
protected function voteOnAttribute($attribute, $subject, TokenInterface $token){
return parent::voteOnAttribute($attribute, $subject,$token)
}
}
Может ли кто-нибудь указать мне правильное направление?