用于PHP7的路由库

时间:2016-10-06 06:19:18

标签: php routing autoload php-7

我需要为php使用路由插件,我决定使用nikic / FastRoute [https://github.com/nikic/FastRoute]。但是,由于我对php的知识有限,我仍然无法成功使用它。

这是我的代码。

require_once 'FastRoute/src/functions.php';
# create a stack of actions

$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
    $r->addRoute('GET', '/', 'get_all_users_handler');
    // {id} must be a number (\d+)
    $r->addRoute('GET', '/contract-management', 'get_user_handler');
    // The /{title} suffix is optional
    $r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler');
});

// Fetch method and URI from somewhere
$httpMethod = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];

// Strip query string (?foo=bar) and decode URI
if (false !== $pos = strpos($uri, '?')) {
    $uri = substr($uri, 0, $pos);
}
$uri = rawurldecode($uri);

$routeInfo = $dispatcher->dispatch($httpMethod, $uri);
switch ($routeInfo[0]) {
    case FastRoute\Dispatcher::NOT_FOUND:
        // ... 404 Not Found
        break;
    case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
        $allowedMethods = $routeInfo[1];
        // ... 405 Method Not Allowed
        break;
    case FastRoute\Dispatcher::FOUND:
        $handler = $routeInfo[1];
        $vars = $routeInfo[2];
        // ... call $handler with $vars
        break;
}

function get_user_handler(){
    print_r("here");
}

function get_article_handler(){
    print_r("article handler");
}

我刚刚更改了'/path/to/vendor/autoload.php'; to require_once'FastRoute / src / functions.php';来自示例代码。但是显示以下错误。

致命错误:未捕获错误:在C:\ wamp \ www \ testproj \ includes \ FastRoute \ src \ functions.php中找不到类'FastRoute \ RouteCollector':21堆栈跟踪:#0 C:\ wamp \ www \ testproj \ includes \ routing.php(13):FastRoute \ simpleDispatcher(Object(Closure))#1 C:\ wamp \ www \ testproj \ index.php(9):require_once('C:\ wamp \ www \ testp。 ..')#2 {main}在第21行的C:\ wamp \ www \ testproj \ includes \ FastRoute \ src \ functions.php中抛出

我认为我在设置方面做错了。但我仍然找不到适合初学者的更好样本。所以,请指出我哪里做错了。提前谢谢。

1 个答案:

答案 0 :(得分:1)

请阅读PHP autoload

你的问题在于删除

textarea

这个PHP脚本会安装一个自动加载器,当某些需要的PHP类未知时,它会自动加载必要的PHP脚本文件。

如果由于某种原因您不想要这个自动加载器,则必须通过其他方式加载所需的类。通常这是通过在每个PHP脚本

中添加之类的行来完成的
require '/path/to/vendor/autoload.php';

所以,大部分时间你都想要这款自动加载器,因为它可以让生活更轻松,代码更短。