Пользовательский URL-адрес PHP для сопоставления контроллера похож на Symfony2 - PullRequest
2 голосов
/ 26 июля 2011

Я хочу сделать простой URL-адрес для сопоставления контроллера, очень похожий на то, что делает Symfony2.Но это все, что я хочу от Symfony2, остальное для меня слишком много.

Для тех, кто не знает, что делает Symfony2:

blog_home:
    pattern:   /blog
    defaults:  { _controller: BlogBundle:Blog:index }

blog_show:
    pattern:   /blog/{slug}
    defaults:  { _controller: BlogBundle:Blog:show }

в файле конфигурации YAML.

ЯМЛ не имеет для меня никакого значения.Я просто хочу достичь той же функциональности.Для возможности сопоставления пользовательских URL-адресов с функциями контроллера.

Может быть, класс отображения с открытым исходным кодом или инфраструктура маршрутизации?Может быть, некоторые уроки?Идеи, чтобы сделать мои собственные?Любые предложения будут полезны.

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

1 Ответ

3 голосов
/ 26 июля 2011

Это моя структура маршрутизации URL:

function route($url, $map) {
    foreach($map as $re => $fn) {
        if(preg_match("~^$re$~", $url, $args)) {
            list($class, $method) = explode(".", $fn);
            return call_user_func_array(
                array(new $class, $method),
                array_slice($args, 1));
        }
    }
    error_404();
}

$ map - это массив, ключи которого являются регулярными выражениями для сопоставления URL-адреса, а значения представляют собой строки "ClassName.method", например

$map = array(
    "/blog/(.+)"          => "BlogController.show",
    "/blog"               => "BlogController.blog",
    "/foobar/(\d+)/(\w+)" => "Foobar.stuff",
);

Функция маршрутизации находит первый соответствующий шаблон, создает экземпляр класса и вызывает метод, передавая подгруппы регулярного выражения в качестве аргументов.Таким образом, URL "/ foobar / 123 / hello" будет перенаправлен на Foobar->stuff(123, 'hello').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...