[英]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.