簡體   English   中英

我應該使用Laravel Middleware嗎?

[英]Should I use Laravel Middleware?

我有一個Laravel應用程序,需要獲得一些需要我的大多數控制器使用的配置變量。 因此,這似乎是使用中間件的最佳時機。 這是正確使用中間件嗎? 如果是這樣,一旦中間件獲得配置變量,最好將這些添加到請求對象中,以便我的控制器可以訪問它們嗎? 感謝任何響應者。 Ĵ

不,絕對!

實際上(根據您的編寫),最好的方法是創建一個應用程序服務並在Service Container - 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');
        //...
    }
}

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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM