Aura路由器AJAX路由失败-找不到路由

时间:2019-02-22 02:54:33

标签: auraphp

为了解决这个问题,我正在转换一个演示应用程序,以利用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小组最近似乎并没有获得太多访问量。我可能做错了一些事情,因此我认为是时候向集体用户社区寻求指导了。任何建设性的批评都将受到欢迎和赞赏。

在此先感谢您,并为此道歉浪费任何人的带宽...

1 个答案:

答案 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

并浏览http://localhost:8000/signin