カスタム ボーターを登録するには、プロジェクトで 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
を機能させます。
独自のロジックを変更して使用する必要があると思います。
これがお役に立てば幸いです