繁体   English   中英

如何在Symfony KNP菜单包中注册自定义选民?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM