2

そのため、Symfony プロジェクトで KnpMenuBundle を使用することにしましたが、メニューが意図したとおりに機能するように、 /vendor/knplabs/knp-menu/src/Knp/Menu/Matcher/Voter/RouteVoter.php.

したがって、vendor フォルダーの内容を変更するのはよくない方法であることはわかっています。私の質問は、これらの変更をどのように適用するのですか? 独自の Voter クラスを作成し、RouteVoter を拡張して、何らかの方法で Symfony に登録する必要があると思います。インターネットのどこにも、その方法を見つけることができませんでした。

何か案は?ありがとう、マイク。

4

1 に答える 1

7

カスタム ボーターを登録するには、プロジェクトで 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 }

次に、メニュービルダーで投票者をインスタンス化する必要があります

private $regexVoter;

public function __construct(RegexVoter $regexVoter)
{
    $this->regexVoter = $regexVoter;
} 

私の例では、有権者は追加のアイテムregexを機能させます。

独自のロジックを変更して使用する必要があると思います。

これがお役に立てば幸いです

于 2016-03-02T14:18:22.767 に答える