如何在我自己的Laravel中间件中“使用”软件包?

问题描述 投票:0回答:1

我使用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"

这让我想知道:是否有一个有效的选项来访问中间件中的包?还是我在这里遇到了设计缺陷?

php laravel-5 package middleware
1个回答
0
投票

好吧,我刚才发现我必须导入Facade,而不是实际的类本身。所以加入

use Xinax\LaravelGettext\Facades\LaravelGettext;

让它终于奏效了!

© www.soinside.com 2019 - 2024. All rights reserved.