0

嗨,我正在使用 Laravel 5 的中间件,我正在做的是我有几个控制器中使用的中间件,我的每个控制器都有自己的配置,我需要传递我的中间件,我该怎么做?

4

1 回答 1

0

如果您在“堆栈”(App/Http/Kernel.php$middleware数组中定义)中使用此中间件,则您没有可用的 $request->route()。

但是,如果您在routes.php文件中使用它作为单个路由或一组路由的中间件,您可以这样做:

根据需要创建一个配置文件,配置项以每个路由的相同名称命名,然后在您的中间件中获取路由名称并加载正确的配置。

抱歉,如果混淆了,想象一下这段代码:

Config/permissions.php

<?php 

return [
    // Route name here
    'user.index' =>
    // Your route options here
    [
        'option_a' => true,
        'option_b' => false,
    ],
    'user.edit' =>
    [
        'option_a' => true,
        'option_b' => true,
    ],
    /* ... */
];
?>

因此,在您的中间件handle功能中,您可以执行以下操作:

public function handle($request, Closure $next)
{
    $route = $request->route()->getName();

    /* Check if there is a permission to this route in config file */
    if (\Config::get("permissions.{$route}")) {
        $options = \Config::get("permissions.{$route}");
        /* Here will be your options by route */
        /* Now it's up to you do what you want */

    } else {
        /* If not, use default options */
    }

    return $next($request);
}

顺便说一句,我建议您使用 Laracast 讨论论坛:

www.laracast.com/discuss

于 2015-03-17T21:08:25.687 回答