为了解决这个问题,我正在转换一个演示应用程序,以利用RESTful,SEO友好的URL。在Web上的应用程序中使用时,除用于AJAX请求的两条路由之一之外的所有路由均适用,并且所有路由均已使用Postman(使用Nginx原始配置)进行了完整测试。
话虽如此,这是有问题的路由定义-登录名是失败的已定义路由:
$routing_map->post('login.read', '/services/authentication/login', [
'params' => [
'values' => [
'controller' => '\Infraweb\Toolkit\Services\Authentication',
'action' => 'login',
]
]
])->accepts([
'application/json',
]);
$routing_map->get('logout.read', '/services/authentication/logout', [
'params' => [
'values' => [
'controller' => '\Infraweb\Toolkit\Services\Authentication',
'action' => 'logout',
]
]
])->accepts([
'application/json',
]);
通过Postman和xdebug跟踪,我想我发现它(显然)没有通过Path规则中我认为是REGEX的检查,但是我不太清楚。至少可以说令人沮丧。在发布之前,我到处可以使用网络搜索的地方到处都是-Auraphp的Google小组最近似乎并没有获得太多访问量。我可能做错了一些事情,因此我认为是时候向集体用户社区寻求指导了。任何建设性的批评都将受到欢迎和赞赏。
在此先感谢您,并为此道歉浪费任何人的带宽...
答案 0 :(得分:0)
让我澄清一下。 Aura.Router不执行调度。它只匹配路线。它无法处理您的路线。
查看完整的working example(在该示例中,处理程序被假定为可调用的)
$callable = $route->handler;
$response = $callable($request);
如果您符合要求,请参见{matching request)
$matcher = $routerContainer->getMatcher();
$route = $matcher->match($request);
您将获得路线,现在您需要编写适当的方法来处理$route->handler
中的值。
这是我在var_dump $route->handler
到/signin
路由之后所做的事情。
array (size=1)
'params' =>
array (size=1)
'values' =>
array (size=2)
'controller' => string '\Infraweb\LoginUI' (length=17)
'action' => string 'read' (length=4)
下面尝试了完整代码。如前所述,我不知道您的路由处理逻辑。因此,正确编写内容取决于您。
<?php
require __DIR__ . '/vendor/autoload.php';
use Aura\Router\RouterContainer;
$routerContainer = new RouterContainer();
$map = $routerContainer->getMap();
$request = Zend\Diactoros\ServerRequestFactory::fromGlobals(
$_SERVER,
$_GET,
$_POST,
$_COOKIE,
$_FILES
);
$map->get('application.signin.read', '/signin', [
'params' => [
'values' => [
'controller' => '\Infraweb\LoginUI',
'action' => 'read',
]
]
]);
$map->post('login.read', '/services/authentication/login', [
'params' => [
'values' => [
'controller' => '\Infraweb\Toolkit\Services\Authentication',
'action' => 'login',
]
]
])->accepts([
'application/json',
]);
$matcher = $routerContainer->getMatcher();
// .. and try to match the request to a route.
$route = $matcher->match($request);
if (! $route) {
echo "No route found for the request.";
exit;
}
echo '<pre>';
var_dump($route->handler);
exit;
为了记录,这是composer.json
{ “要求”:{ “光环/路由器”:“ ^ 3.1”, “ zendframework / zend-diactoros”:“ ^ 2.1” } }
并通过
运行php -S localhost:8000 index.php