Я использую regexVoter из knpMenu, как это
//This is on my createMenuAction
$this->matchingRoute($menu);
/**
* @param $menu
*
* @return bool
*/
private function matchingRoute($menu)
{
foreach ($menu->getChildren() as $child) {
$childRegex = $child->getAttribute('regex');
$voter = new RegexVoter($childRegex);
$voterTest = $voter->matchItem($child);
if ($voterTest == true && $this->request->getUri()) {
$child->setCurrent(true);
} else {
$child->setCurrent(false);
}
}
}
Это работает, но устанавливаю текущий класс для всех дочерних элементов с атрибутами регулярного выражения. Этот избиратель сравнивает регулярные выражения childs с их маршрутом, чтобы он все время становился правдой.
Я пытался добавить return true;
if ($voterTest == true && $this->request->getUri()) {
$child->setCurrent(true);
return true;
} else {
$child->setCurrent(false);
}
Но это устанавливает текущий класс для первого потомка, который возвращает true с помощью regexVoter.
Должен ли я проверить это регулярное выражение в отношении текущего маршрута с этим избирателем?
Как я могу использовать этого избирателя, чтобы установить текущий класс на хорошего ребенка?
Спасибо,
Задача ещё не решена.
Других решений пока нет …