簡體   English   中英

如何在自己的Laravel中間件中“使用”軟件包?

[英]How to 'use' packages in my own Laravel middleware?

我使用LaravelGettext包在Laravel中編寫了一個本地化中間件,如下所示:

<?php

namespace App\Http\Middleware;

use Closure;

class Locale {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next) {
        if ($request->method() === 'GET') {
            $segment = $request->segment(1);

            if (!in_array($segment, config('laravel-gettext.supported-locales'))) {
                $segments = $request->segments();
                $fallback = session('locale') ?: config('laravel-gettext.fallback-locale');
                $segments = array_prepend($segments, $fallback);

                return redirect()->to(implode('/', $segments));
            }

            session(['locale' => $segment]);
            LaravelGettext::setLocale($segment);
        }
        return $next($request);
    }

}

我通過以下途徑路由到中間件:

Route::prefix('{lang?}')->middleware('locale')->group(function () {
    ...
}

盡管通過中間件運行卻給了我這個錯誤:

"Class 'App\Http\Middleware\LaravelGettext' not found"

所以我想我可能需要通過添加以下內容來手動導入LaravelGettext包:

use Xinax\LaravelGettext\LaravelGettext;

現在給我這個異常:

"Non-static method Xinax\LaravelGettext\LaravelGettext::setLocale() should not be called statically"

這讓我感到奇怪:甚至沒有有效的選項來訪問中間件中的軟件包? 還是我在這里遇到了設計缺陷?

好吧,我想到我必須導入Facade,而不是實際的班級本身。 所以加

use Xinax\LaravelGettext\Facades\LaravelGettext;

終於成功了!

暫無
暫無

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

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