如何使用PHP AURA ROUTER和ZEND DIACTOROS向控制器发送GET变量

如何使用PHP AURA ROUTER和ZEND DIACTOROS向控制器发送GET变量,php,auraphp,Php,Auraphp,我正在编写我的第一个MVC PHP应用程序,没有任何只支持框架的通用PHP库,尽管如此,我在向控制器发送GET变量的过程中遇到了一些问题,没有使用superglobal$\u GET 我正在使用Aurora路由器映射HTTP消息接口的web路由和Zend Diactoros 我有几种方法使用POST变量,使用$request Diactoros对象,效果与预期一样,但我无法使用以下路径:app.test/test/thisGetVar将“thisGetVar”发送到控制器方法 前控制器: req

我正在编写我的第一个MVC PHP应用程序,没有任何只支持框架的通用PHP库,尽管如此,我在向控制器发送GET变量的过程中遇到了一些问题,没有使用superglobal$\u GET

我正在使用Aurora路由器映射HTTP消息接口的web路由和Zend Diactoros

我有几种方法使用POST变量,使用$request Diactoros对象,效果与预期一样,但我无法使用以下路径:app.test/test/thisGetVar将“thisGetVar”发送到控制器方法

前控制器:

require_once '../vendor/autoload.php';

use Aura\Router\RouterContainer;

$request = Zend\Diactoros\ServerRequestFactory::fromGlobals(
    $_SERVER,
    $_GET,
    $_POST,
    $_COOKIE,
    $_FILES
);

$routerContainer = new RouterContainer();
$map = $routerContainer->getMap();

$map->get('formhLogin', '/login', [
    'controller' => 'App\Controllers\AuthController',
    'action' => 'formLoad'
]);

$map->get('test', '/test/{var}' , [
    'controller' => 'App\Controllers\TestController',
    'action' => 'getVar',
]);

$matcher = $routerContainer->getMatcher();
$route = $matcher->match($request);

if(!$route){
    echo 'Route not Found';
}else{
    $handlerData = $route->handler;
    $controllerName = $handlerData['controller'];
    $actionName = $handlerData['action'];

    $controller = new $controllerName;
    $response = $controller->$actionName($request);
   
    foreach($response->getHeaders()as $name => $values)
    {
        foreach($values as $value) 
        {
            header(sprintf('%s: %s' , $name , $value), false);
        }

    }
        http_response_code($response->getStatusCode());
        echo $response->getBody();        
}
namespace App\Controllers;

class PruebaController extends BaseController{
    public function getVar($request){
        $id = $request->getAttribute('id');
        echo $id;
        $getData = $request->getParsedBody();
        echo $getData['id'];
        return $this->renderHTML('test.twig');
    }
}
TestController.php:

require_once '../vendor/autoload.php';

use Aura\Router\RouterContainer;

$request = Zend\Diactoros\ServerRequestFactory::fromGlobals(
    $_SERVER,
    $_GET,
    $_POST,
    $_COOKIE,
    $_FILES
);

$routerContainer = new RouterContainer();
$map = $routerContainer->getMap();

$map->get('formhLogin', '/login', [
    'controller' => 'App\Controllers\AuthController',
    'action' => 'formLoad'
]);

$map->get('test', '/test/{var}' , [
    'controller' => 'App\Controllers\TestController',
    'action' => 'getVar',
]);

$matcher = $routerContainer->getMatcher();
$route = $matcher->match($request);

if(!$route){
    echo 'Route not Found';
}else{
    $handlerData = $route->handler;
    $controllerName = $handlerData['controller'];
    $actionName = $handlerData['action'];

    $controller = new $controllerName;
    $response = $controller->$actionName($request);
   
    foreach($response->getHeaders()as $name => $values)
    {
        foreach($values as $value) 
        {
            header(sprintf('%s: %s' , $name , $value), false);
        }

    }
        http_response_code($response->getStatusCode());
        echo $response->getBody();        
}
namespace App\Controllers;

class PruebaController extends BaseController{
    public function getVar($request){
        $id = $request->getAttribute('id');
        echo $id;
        $getData = $request->getParsedBody();
        echo $getData['id'];
        return $this->renderHTML('test.twig');
    }
}
$getData显示错误:“注意:未定义的索引:id在..”

echo$id(不发送输出)

有人能帮我吗


在这个例子中,我想要的输出是:“thisGetVar”

在将请求对象传递给控制器方法之前,您必须将路由属性传递给请求

foreach ($route->attributes as $key => $val) {
    $request = $request->withAttribute($key, $val);
}

谢谢你的评论,它很有效。我不知道变量在属性中。