如何解决Laravel中间件不执行功能
我有这个Locale中间件,它根据数据库上的设置来设置语言
public function handle($request,Closure $next)
{
$HQ = Branch::where('is_hq',1)->where('is_active',1)->first();
$Company = GlobalVariable()->branch($HQ)->all()->whereIn('group',array(1,3,9))->keyBy('key');
$locale = strtolower($Company['bi__language']->value);
if ($locale === 'eng') {
\App::setlocale('en');
} else {
\App::setlocale($locale);
}
return $next($request);
}
但是我需要获取当前用户所在的分支,因此我需要首先获取 Auth :: id(),因此我将代码更改为此以访问Auth。
public function handle($request,Closure $next)
{
$response = $next($request);
$HQ = Branch::where('is_hq',1)->where('user_id',\Auth::id())->first();
$Company = GlobalVariable()->branch($HQ)->all()->whereIn('group',9))->keyBy('key');
$locale = strtolower($Company['bi__language']->value);
if ($locale === 'eng') {
\App::setlocale('en');
} else {
\App::setlocale($locale);
}
return $response;
}
现在我正在登录当前用户,但问题是它没有执行此代码块
if ($locale === 'eng') {
\App::setlocale('en');
} else {
\App::setlocale($locale);
}
Kernel.php
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,\App\Http\Middleware\TrimStrings::class,\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,\App\Http\Middleware\TrustProxies::class,\Barryvdh\Cors\HandleCors::class,\App\Http\Middleware\Locale::class,];
注意:没有Auth的代码正在执行此代码块,但第二个代码不是
我在这里想念东西吗?
解决方法
第二个你有
$response = $next($request);
在一开始,所以代码将在response
执行。
您需要执行以下操作:
public function handle($request,Closure $next)
{
$HQ = Branch::where('is_hq',1)->where('is_active',1)->where('user_id',\Auth::id())->first();
$Company = GlobalVariable()->branch($HQ)->all()->whereIn('group',array(1,3,9))->keyBy('key');
$locale = strtolower($Company['bi__language']->value);
if ($locale === 'eng') {
\App::setlocale('en');
} else {
\App::setlocale($locale);
}
return $next($request);
}
如果没有auth()->user()
,这是因为注册中间件的位置不正确。
全局中间件堆栈在启动会话和身份验证详细信息之前运行。
在“网络”组的底部或路由中间件中定义此名称。
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,\Illuminate\Session\Middleware\StartSession::class,// \Illuminate\Session\Middleware\AuthenticateSession::class,\Illuminate\View\Middleware\ShareErrorsFromSession::class,\App\Http\Middleware\VerifyCsrfToken::class,\Illuminate\Routing\Middleware\SubstituteBindings::class,\App\Http\Middleware\Locale::class,],'api' => [
'throttle:60,1',];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。