要註冊自定義選舉人,您必須在您的項目中創建一個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 }
然後,你必須實例化你的選民在使用MenuBuilder服務
private $regexVoter;
public function __construct(RegexVoter $regexVoter)
{
$this->regexVoter = $regexVoter;
}
在我的例子,我的選民得到項目額外regex
工作。
我認爲你必須修改和使用你自己的邏輯。
我希望這將有助於你
我認爲,如果你使用ESI,你應該使用這個表達式:'的preg_match($ itemRegex,$這個 - > requestStack-> getMasterRequest() - > getPathInfo())' – Bruno