Regexp в обратную сторону

player

Новичок
Regexp в обратную сторону

Добрый день!

Решил написать в MVC системе рутер, который берет на себя функцию mod_rewrite и также генерирует ссылки.

То есть существует некоторая изменяемая база регулярных выражении

$roots['/^\/([a-zA-Z]+)\?*(.*)$/'] => ['/page/view?id=$1&$2'];
$roots['........'] => ['........'];
...

и функции Router::decode($url) которая заменяет регулярное выражение на внутреннии идентификатор,
и функция Router::decode($url) которая должна делать противоположное.

Вопрос: есть ли возможность автоматически переписывать выше указанные $roots для этой задачи, т.е из указанного примера становится
'/^\/page/view?id=([a-zA-Z]+)&(.*)/' => '/$1\?*$2$'

то есть если грубо сказать, менять скобки и $1, $2 местами?
 

fixxxer

К.О.
Партнер клуба
что ж вы все с этим реврайтом зациклились, даже когда от него избавляетесь делаете так же :)
 

player

Новичок
а как тогда делать юзерфрендли ссылки? не совсем понимаю.
Ок, если без реврайта и регулярных выражении, то как тогда создать правила по парсингу ссылок?
 

fixxxer

К.О.
Партнер клуба
Я не про регексп, а про строки с $1 и $2 твои. Я бы ставил в соответствие регекспу не строку, а string Controller, string Action и, возможно, array Arguments.

Для обратных соответствий и построения урла лично я использую Blitz Templates ;) но можно чо угодно с подстановкой переменных.

ну вот пример*

матч
PHP:
'^/validation/([\w\d]+)/([\w\d]+)/([\w\d]+)' => array(
    'controller' => 'ValidationPage',
    'acton' => $matches[1],
    'arguments' => array(
       'id' => $matches[2],
       'key' => isset($matches[3]) ? $matches[3] : null,
    )
)
url build
PHP:
class ValidationPage extends Page {

    static protected $url = '/validation/{{ s(action) }}/{{ i(id) }}/{{ IF key }}{{ s(key )}}{{ END }}';

 ...
автоматически генерить одно их другого не вижу необходимости )
 
Сверху