Вызов функции PHP на основе URI - PullRequest
0 голосов
/ 08 августа 2009

Я хочу создать простой скрипт php, который на основе URI будет вызывать определенную функцию.

Вместо нескольких утверждений if я хотел бы посетить:

/ Dev / вид / сообщения /

и вызовет функцию 'posts', которую я создал в скрипте PHP.

Любая помощь будет принята с благодарностью.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 08 августа 2009

Используете ли вы фреймворк? они делают такие вещи для вас.

вам нужно использовать mod_rewrite в apache для этого.

В основном вы берете / dev / view / posts и переписать его /dev/view.php?page=posts

 RewriteEngine On
 RewriteRule ^/dev/view/posts/(.*)$ /dev/view?page=$1

в view.php

switch($_REQUEST['page'])
{
    case 'posts':
        // call posts
        echo posts();
        break;
}

РЕДАКТИРОВАТЬ сделал этот вызов любой функции, называемой "страница"

Вы, вероятно, хотите использовать платформу для этого, потому что это влияет на безопасность. но очень просто вы можете сделать это:

if (array_key_exists('page',$_REQUEST))
{
    $f = $_REQUEST['page'];
    if (is_callable($f))
    {
        call_user_func($f);
    }
}

Обратите внимание, есть НАМНОГО лучших способов сделать это! Вы должны использовать рамки !!!

1 голос
/ 08 августа 2009

Ознакомьтесь с документацией по функциям call_user_func.

$functions['/dev/view/posts']    = 'function_a';
$functions['/dev/view/comments'] = 'function_b';
$functions['/dev/view/notes']    = 'function_c';

$uri = '/dev/view/comments';

call_user_func($functions[$uri]);
0 голосов
/ 08 августа 2009

То, что вы ищете, это форма перезаписи URL на вашем веб-сервере. Например, если вы используете Apache, вы должны искать mod_rewrite. Пример того, как может выглядеть ваше правило:

RewriteEngine On
RewriteRule ^/dev/view/posts/(.*)$ /posts.php?id=$1

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

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