[英]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.