Обратный путь от регулярного выражения

Вы знаете, что обратная маршрутизация известна проблема. Я использую CodeIgniter и пытаюсь сгенерировать URL из маршрутов регулярных выражений.

Мой примерный маршрут:

$route['product-detail/([a-z]+)/(\d+)'] = "catalog/product_view/$2";

или же:

$route['product-detail/([a-z]+)/(\d+)'] = array('catalog/product_view/$2', 'product-detail');

Пример использования:

<a href="<?php echo route('product-detail' , array('category' => 'bikes', 'id' => 9)); ?>">Item Name</a>

Ожидаемый результат:

<a href="/product-detail/bikes/9">Item Name</a>

Я старался Простая обратная маршрутизация но он поддерживает только ключи, а не строки регулярных выражений.

Как я могу решить эту проблему?

0

Решение

Попробуйте это исправить для reverseRoute метод. Изменить это:

$route = $this->_reverseRoutes[$route_name];

foreach($args_keyval as $key => $val)
{
$route = str_replace("(:$key)", $val, $route);
}

return $route;

к этому : демонстрация

$route = $this->_reverseRoutes[$route_name];

preg_match_all('/\(([^)]+)\)/', $route, $matches);

if (isset($matches[1]) && is_array($matches[1])) {
$wildCardsAndRegex = $matches[1];
$index = 0;

foreach ($args_keyval as $key => $val)
{
if (isset($wildCardsAndRegex[$index])) {
if ($wildCardsAndRegex[$index][0] === ':') {
// for wildcard
$route = str_replace('(:'.$key.')', $val, $route);
} elseif (preg_match('/'.$wildCardsAndRegex[$index].'/', $val)) {
// for regex
$route = preg_replace('/\('.preg_quote($wildCardsAndRegex[$index], '\\').'\)/', $val, $route, 1);
}
}
$index++;
}
}

return $route;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]