我应该使用Laravel Middleware吗?

时间:2016-05-04 17:46:11

标签: php laravel laravel-5 middleware

我有一个Laravel应用程序,需要获得一些需要我的大多数控制器使用的配置变量。 因此,这似乎是使用中间件的最佳时机。 这是正确使用中间件吗?如果是这样,一旦中间件获得配置变量,最好将这些添加到请求对象中,以便我的控制器可以访问它们吗? 感谢任何响应者。 Ĵ

2 个答案:

答案 0 :(得分:2)

不,绝对!

实际上(基于您的编写),最好的方法是创建应用服务并在服务容器上注册此服务 - App\Providers\AppServiceProvider(在app/Providers/AppServiceProvider.php中)。

这样的事情:

<?php
# The Config Service:

namespace App\Services;

/**
 * Config Manager
 */
class Config
{
    /** @var SomeDependency */
    protected $dependency;

    public function __construct(SomeDependency $dependency)
    {
        $this->dependency = $dependency;
    }

    public function getVar($var)
    {
        // ...
    }
}

在您的服务提供商中:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    //...

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {

        $this->registerConfigManager();

    }

    public function registerConfigManager()
    {
        $this->app->singleton('config_service', function ($app) {
            return new \App\Services\Config(new \SomeNamespace\SomeDependency);
        });
    }

    //...
}

现在您可以通过app()访问服务容器,如下所示:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class MyController extends Controller
{
    public function index(Request $request)
    {
        app('config_service')->getVar('key');
        //...
    }
}

答案 1 :(得分:1)

IMO,中间件用于预处理请求,限制用户访问和其他安全相关。

我只需在主Controller类中加载配置,并在扩展控制器中使用它。

例如:

基本控制器

namespace App\Http\Controllers;

uses goes here ...;

class Controller extends BaseController
{
    protected $configs = [];

    public function __construct() {
        $this->loadConfigs();
    }

    protected function loadConfigs()
    {
        //read configuration files or tables in database 
        //and put the values into '$this->configs';
    }

}

用户控制器

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;

class User extends Controller
{
    public function index()
    {
        echo $this->configs['toolbar.color']; //just an example
    }
}