如何使用 PHP AURA ROUTER 和 ZEND DIACTOROS 将 GET 变量发送到控制器
How to Send a GET variable to a controller using PHP AURA ROUTER and ZEND DIACTOROS
我正在编写我的第一个 MVC PHP 应用程序,没有任何框架,只有常见的 PHP 库,但是,我在将 GET 变量发送到控制器的过程中遇到了一些问题,没有使用超全局 $_GET.
我正在使用 Aurora Router 映射 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();
}
TestController.php:
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 in ..”
echo $id(不发送输出)
有人可以帮我吗?
本例中我想要的输出是:'thisGetVar'
在将请求对象传递给控制器方法之前,您必须将路由属性传递给请求。
foreach ($route->attributes as $key => $val) {
$request = $request->withAttribute($key, $val);
}
我正在编写我的第一个 MVC PHP 应用程序,没有任何框架,只有常见的 PHP 库,但是,我在将 GET 变量发送到控制器的过程中遇到了一些问题,没有使用超全局 $_GET.
我正在使用 Aurora Router 映射 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();
}
TestController.php:
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 in ..”
echo $id(不发送输出)
有人可以帮我吗?
本例中我想要的输出是:'thisGetVar'
在将请求对象传递给控制器方法之前,您必须将路由属性传递给请求。
foreach ($route->attributes as $key => $val) {
$request = $request->withAttribute($key, $val);
}