我在使用slim 3作为我的路由器的相当大的应用程序上工作。 菜单结构是这样的。有些路线需要分组,有些路线不需要(我认为)。我不知道该怎么办。
示例菜单结构。但它会拥有更多的物品。在这里分组是个好主意吗?我的意思是,因为你看不到所有"客户"有"设置"子页面/路由,但将来可能会。如何为此编写分组逻辑?
client 1
info
settings
loremipsum
loremipsum
client 2
info
loremipsum
loremipsum
client 3
info
loremipsum
loremipsum
答案 0 :(得分:0)
您可以实现一个小型中间件并检查每个客户端的持久性。
设置“determineRouteBeforeAppMiddleware”必须设置为true。
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);
}
});