У меня есть объект Application, в котором хранится идентификатор объявления с идентификатором пользователя
class User implements UserInterface, \Serializable
{
/**
* @ORM\OneToMany(targetEntity="App\Entity\Application", mappedBy="author", orphanRemoval=true)
*/
private $applications;
}
Объект Application
class Application
{
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Advert", inversedBy="applications")
* @ORM\JoinColumn(nullable=false)
*/
private $advert;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="applications")
* @ORM\JoinColumn(nullable=false)
*/
private $author;
}
Мне нужен избиратель, который может отрицать действие, если текущийпользователь уже подал заявку на конкретное объявление (при просмотре объявления). Пока что в избирателе попробовали
класс AdvertApplicationsVoter расширяет избирателя {
protected function supports($attribute, $subject)
{
return in_array($attribute, ['APP_APPLY', 'ADVERT_APPLY']) && $subject instanceof Application;
}
/**
* @param string $attribute
* @param mixed $subject
* @param TokenInterface $token
* @return bool
*/
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
$user = $token->getUser();
$apl = $user->getApplications();
// if the user is anonymous, do not grant access
if (!$user instanceof User) {
return false;
}
switch ($attribute) {
case 'APP_APPLY':
return $this->dw($user, $subject);
break;
case 'ADVERT_APPLY':
// logic to determine if the user can VIEW
// return true or false
break;
}
return false;
}
private function applied(?User $user, Advert $app)
{
return $user->getId() === $app->getApplications()->getKeys();
}
private function aa(?User $user, Application $app)
{
return $user->getApplications() === $app->getAdvert();
}
private function dw(?User $user, Application $app)
{
foreach($user->getApplications() as $app) {
if ($app->getAdvert() === $app) {
return false;
}
}
return true;
}
}
Я получаю доступ воздержался, я не знаюкак отладить избирателя
Заранее спасибо