我需要为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中抛出
我认为我在设置方面做错了。但我仍然找不到适合初学者的更好样本。所以,请指出我哪里做错了。提前谢谢。
答案 0 :(得分:1)
请阅读PHP autoload。
你的问题在于删除
行textarea
这个PHP脚本会安装一个自动加载器,当某些需要的PHP类未知时,它会自动加载必要的PHP脚本文件。
如果由于某种原因您不想要这个自动加载器,则必须通过其他方式加载所需的类。通常这是通过在每个PHP脚本
中添加之类的行来完成的require '/path/to/vendor/autoload.php';
所以,大部分时间你都想要这款自动加载器,因为它可以让生活更轻松,代码更短。