[英]How to register custom voter in Symfony KNP Menu Bundle?
所以我決定在我的Symfony項目中使用KnpMenuBundle,但為了讓菜單按照我的意圖工作,我在/vendor/knplabs/knp-menu/src/Knp/Menu/Matcher/Voter/RouteVoter.php
添加了2行/vendor/knplabs/knp-menu/src/Knp/Menu/Matcher/Voter/RouteVoter.php
。
所以我知道更改vendor文件夾的內容是一種不好的做法。 我的問題是,如何應用這些更改? 我猜我必須創建自己的Voter類,擴展RouteVoter並以某種方式將其注冊到Symfony。 我無法在互聯網上找到如何做到這一點。
有任何想法嗎? 謝謝,邁克。
要注冊自定義選民,您必須在項目中創建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
工作。
我認為你必須修改並使用自己的邏輯。
我希望這能幫到您
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.