Как зарегистрировать своего избирателя в Symfony KNP Menu Bundle?

поэтому я решил использовать KnpMenuBundle в своем проекте Symfony, но для того, чтобы меню работало так, как я намеревался, я добавил 2 строки в /vendor/knplabs/knp-menu/src/Knp/Menu/Matcher/Voter/RouteVoter.php,

Так что я знаю, что менять содержимое папки поставщика — плохая практика. У меня вопрос, как применить эти изменения? Я предполагаю, что мне нужно создать свой собственный класс Voter, расширить RouteVoter и каким-то образом зарегистрировать его в Symfony. Нигде в Интернете я не мог найти, как это сделать.

Есть идеи? Спасибо, Майк.

2

Решение

Для регистрации собственного избирателя вы должны создать в своем проекте customVoter и зарегистрировать его как сервис.

Ваш избиратель должен выглядеть примерно так

class RegexVoter implements VoterInterface
{
/**
* @var RequestStack
*/
private $requestStack;

/**
* @param RequestStack $requestStack
*/
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}

/**
* {@inheritdoc}
*/
public function matchItem(ItemInterface $item)
{
$childRegex = $item->getExtra('regex');

if ($childRegex !== null && preg_match($childRegex, $this->requestStack->getCurrentRequest()->getPathInfo())) {
return true;
}

return;
}
}

Зарегистрируйте это как услугу как это

menu.voter.regex:
class: AppBundle\Menu\Matcher\Voter\RegexVoter
arguments: [ '@request_stack' ]
tags:
- { name: knp_menu.voter }

Тогда вам нужно создать экземпляр вашего избирателя в вашем меню.

private $regexVoter;

public function __construct(RegexVoter $regexVoter)
{
$this->regexVoter = $regexVoter;
}

В моем примере мой избиратель получил дополнительный предмет regex работать.

Я думаю, что вы должны изменить и использовать свою собственную логику.

Я надеюсь, что это поможет вам

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]