Маршрутизатор Aura AJAX Ошибка маршрута - Маршрут не найден - PullRequest
0 голосов
/ 22 февраля 2019

Чтобы предвосхитить этот вопрос, я конвертирую демонстрационное приложение, чтобы использовать RESTful, оптимизированные для SEO URL;КАЖДЫЙ маршрут за исключением одного из двух маршрутов, используемых для запросов 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 я думаю, что я вижу, что это (очевидно) не то, во что я верюбыть проверкой REGEX в правиле Path, но я не могу разобрать.Это расстраивает, если не сказать больше.Я искал везде, где мог, используя веб-поиск, прежде чем писать здесь - группа Google для Auraphp, кажется, не получает много трафика в эти дни.Возможно, я что-то сделал неправильно, поэтому решил, что пришло время спросить сообщество коллективных пользователей о каком-то направлении.Любая и вся конструктивная критика очень приветствуется и ценится.

Спасибо заранее, и извиняюсь за трату чьей-либо пропускной способности в этом вопросе ...

1 Ответ

0 голосов
/ 25 февраля 2019

Позвольте мне кое-что прояснить.Аура. Маршрутизатор не занимается диспетчеризацией.Это только соответствует маршруту.Он не управляет обработкой ваших маршрутов.

См. Полный рабочий пример (В этом примере обработчик считается вызываемым)

$callable = $route->handler;
$response = $callable($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

{"require": {"aura / router": "^3.1 "," zendframework / zend-diactoros ":" ^ 2.1 "}}

и работает через

php -S localhost:8000 index.php

и просматривает http://localhost:8000/signin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...