Slim 3. 我应该使用分组路由吗?
Slim 3. Should i use grouped routes?
我正在开发一个相当大的应用程序,使用 slim 3 作为我的路由器。
菜单结构是这样的。有些路线需要分组,有些则不需要(我认为)。我不确定我应该怎么做。
示例菜单结构。但它将容纳更多物品。在这里分组是个好主意吗?我的意思是,如您所见,并非所有 "clients" 都有 "settings" 子 page/route,但将来可能会有。怎么写这样的分组逻辑?
client 1
info
settings
loremipsum
loremipsum
client 2
info
loremipsum
loremipsum
client 3
info
loremipsum
loremipsum
您可以实现一个小型中间件并检查每个客户端的权限。
设置 "determineRouteBeforeAppMiddleware" 必须设为真。
use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
$app = new App([
'settings' => [
// Must be set to true to get access to route within middleware
'determineRouteBeforeAppMiddleware' => true
]
]);
然后添加这个中间件并自定义它:
$container = $app->getContainer();
// Simple Route Access Control Middleware
$app->add(function (Request $request, Response $response, $next) use ($container) {
// Retrieving Current Route
/* @var \Slim\Route $route */
$route = $request->getAttribute('route');
if (!$route) {
return $next($request, $response);
}
$name = $route->getName();
$groups = $route->getGroups();
$methods = $route->getMethods();
$arguments = $route->getArguments();
// Do something with that information
// Check the permissions here...
$routePermission = $container->get(RoutePermission::class);
if (!$routePermission->isRouteAllowed($name, $arguments['client'])) {
// Permission denied
return $response->withStatus(403, 'Forbidden');
} else {
// OK :-)
return $next($request, $response);
}
});
我正在开发一个相当大的应用程序,使用 slim 3 作为我的路由器。 菜单结构是这样的。有些路线需要分组,有些则不需要(我认为)。我不确定我应该怎么做。
示例菜单结构。但它将容纳更多物品。在这里分组是个好主意吗?我的意思是,如您所见,并非所有 "clients" 都有 "settings" 子 page/route,但将来可能会有。怎么写这样的分组逻辑?
client 1
info
settings
loremipsum
loremipsum
client 2
info
loremipsum
loremipsum
client 3
info
loremipsum
loremipsum
您可以实现一个小型中间件并检查每个客户端的权限。
设置 "determineRouteBeforeAppMiddleware" 必须设为真。
use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
$app = new App([
'settings' => [
// Must be set to true to get access to route within middleware
'determineRouteBeforeAppMiddleware' => true
]
]);
然后添加这个中间件并自定义它:
$container = $app->getContainer();
// Simple Route Access Control Middleware
$app->add(function (Request $request, Response $response, $next) use ($container) {
// Retrieving Current Route
/* @var \Slim\Route $route */
$route = $request->getAttribute('route');
if (!$route) {
return $next($request, $response);
}
$name = $route->getName();
$groups = $route->getGroups();
$methods = $route->getMethods();
$arguments = $route->getArguments();
// Do something with that information
// Check the permissions here...
$routePermission = $container->get(RoutePermission::class);
if (!$routePermission->isRouteAllowed($name, $arguments['client'])) {
// Permission denied
return $response->withStatus(403, 'Forbidden');
} else {
// OK :-)
return $next($request, $response);
}
});