超薄3.我应该使用分组路线吗?

时间:2017-11-22 09:22:53

标签: php slim

我在使用slim 3作为我的路由器的相当大的应用程序上工作。 菜单结构是这样的。有些路线需要分组,有些路线不需要(我认为)。我不知道该怎么办。

示例菜单结构。但它会拥有更多的物品。在这里分组是个好主意吗?我的意思是,因为你看不到所有"客户"有"设置"子页面/路由,但将来可能会。如何为此编写分组逻辑?

client 1
    info
    settings
    loremipsum
    loremipsum

client 2
    info
    loremipsum
    loremipsum

client 3
    info
    loremipsum
    loremipsum

1 个答案:

答案 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);
    }
});