簡體   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