gpt4 book ai didi

php - 如何使用 FastRoute?

转载 作者:可可西里 更新时间:2023-10-31 23:04:23 25 4
gpt4 key购买 nike

我正在尝试使用 FastRoute路由库,无法使简单的用法示例起作用。

这是在 GitHub page 上找到的基本用法示例:

<?php

require '/path/to/vendor/autoload.php';

$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
$r->addRoute('GET', '/users', 'get_all_users_handler');
// {id} must be a number (\d+)
$r->addRoute('GET', '/user/{id:\d+}', '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;
}

注释是“...用 $vars 调用 $handler”,我试过返回 call_user_func_array($handler, $vars) 但它不起作用。

我还认为可能是 .htaccess 文件阻止了它的工作,因为 Github 页面没有该项目的 .htaccess 文件示例.我正在使用这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [QSA,L]

我也试过调用一个带有闭包的路由作为处理程序,如下所示:

$r->addRoute('GET', '/', function() {
echo 'home';
});

最佳答案

如何处理请求的例子

$r->addRoute('GET', '/users', User::class . '/getUsers');

然后如果dispatcher找到了,可以按如下方式处理

case FastRoute\Dispatcher::FOUND:
$handler = $routeInfo[1];
$vars = $routeInfo[2];
list($class, $method) = explode("/", $handler, 2);
call_user_func_array(array(new $class, $method), $vars);

break;

不要忘记使用 getUsers() 方法创建类 User

关于php - 如何使用 FastRoute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38686776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com