在Slim 4中访问中间件中的路由参数。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Slim 4中访问中间件中的路由参数。相关的知识,希望对你有一定的参考价值。
我想知道如何在Slim 4中访问中间件的路由参数。
如果我定义了一个带有占位符和中间件的路由,那么我想在Slim 4中访问路由参数。
<?php
// ...
$app
->get('/{userId}', Controller::class)
->add(Middleware::class);
我想访问以下参数的值 {userId}
在控制器被输入之前,我们可以从中间件中获取信息。
class Middleware
{
function __invoke($request, $handler)
{
// Resolve user ID in this scope?..
return $handler->handle($request);
}
}
我知道在Slim 3中,我们可以 访问请求对象的属性但是,在Slim 4中无法使用。路由对象的属性中包含以下项目。
__routingResults__
__route__
__basePath__
其中不包含参数
答案
你需要的是文档 此处. 你可以使用中间件中的请求对象创建路由上下文和路由对象本身。只需记住,你必须添加路由中间件才行。下面是一个例子。
<?php
use SlimFactoryAppFactory;
use SlimRoutingRouteContext;
require __DIR__ . '/../vendor/autoload.php';
// Create App
$app = AppFactory::create();
Class Middleware
{
function __invoke($request, $handler)
{
$routeContext = RouteContext::fromRequest($request);
$route = $routeContext->getRoute();
// Resolve user ID in this scope
$id = $route->getArgument('id');
$response = $handler->handle($request);
$response->getBody()->write("Route parameter value (in middleware): {$id}");
return $response;
}
}
$app->get('/{id}', function($request, $response, $args) {
return $response;
})->add(Middleware::class);
$app->addRoutingMiddleware();
// Run app
$app->run();
现在试着访问 /1
或 /2
而你看到中间件是知道参数值的。
以上是关于在Slim 4中访问中间件中的路由参数。的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 5.3 的中间件中访问路由 URL 参数
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段