laravel 5 中间件中的条件始终为 false
Condition in laravel 5 Middleware always false
我正在尝试在 Middleware
中给出条件。
Here is my script
if (auth()->check() && auth()->user()->type == 'TP001') {
$menu->add("User Control",array('nickname' => "user",'class'=>'treeview'))
->append(' <b class="caret"></b>')
->prepend('<span class="glyphicon glyphicon-user"></span> ');
$menu->user->add('Daftar User','user/list');
$menu->user->add('Tipe User','user/type');
} else {
/* Some code here...*/
}
即使我已经使用 'TP001'
登录(总是在 else 中),上面的脚本我也看不到带有条件的菜单,然后我尝试用这个
修复我的代码
auth()->user()->isDeveloper()
My model
public function isDeveloper()
{
return ($this->type == 'TP001');
}
但还是不行,有什么办法可以正确地给出上述条件吗?提前致谢,抱歉我的英语不好。
My Kernel
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\Frontend::class,
];
您可以像这样在任何 blade 文件中获取当前用户:
{{ Auth::user()->name }}
在您的 blade 中执行此操作:
@if(Auth::check() && Auth::user()->type == 'TP001')
/* Some code here...*/
@endif
在您的中间件中按照您的要求执行此操作!:
if (\Auth::check() && \Auth::user()->type == 'TP001') {
$menu->add("User Control",array('nickname' => "user",'class'=>'treeview'))
->append(' <b class="caret"></b>')
->prepend('<span class="glyphicon glyphicon-user"></span> ');
$menu->user->add('Daftar User','user/list');
$menu->user->add('Tipe User','user/type');
} else {
/* Some code here...*/
}
中间件内核有你发布的 $middleware
,每个请求中都有 运行 的中间件,但它们 运行 在路由中间件之前(你 select 在路线定义)。
您可能正在使用 "web" 中间件组。尝试在最后添加您的自定义中间件。我认为 Laravel 5.4 中的默认值是:
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\Frontend::class, // <-- your middleware at the end
],
'api' => [
'throttle:60,1',
'bindings',
],
];
这样您就知道您的中间件将 运行 排在其他中间件之后(启动会话并检查身份验证的中间件)
您可以像这样将自定义中间件放在内核文件中受保护的 $routeMiddleware = [ ] 数组中
$routeMiddleWare = ['frontend' => \App\Http\Middleware\Frontend::class]
之后您将能够访问您的 Auth::check
并且不要忘记输入
Route::group(['middleware' => ['frontend']], function() { // your routes will go here.. });
我正在尝试在 Middleware
中给出条件。
Here is my script
if (auth()->check() && auth()->user()->type == 'TP001') {
$menu->add("User Control",array('nickname' => "user",'class'=>'treeview'))
->append(' <b class="caret"></b>')
->prepend('<span class="glyphicon glyphicon-user"></span> ');
$menu->user->add('Daftar User','user/list');
$menu->user->add('Tipe User','user/type');
} else {
/* Some code here...*/
}
即使我已经使用 'TP001'
登录(总是在 else 中),上面的脚本我也看不到带有条件的菜单,然后我尝试用这个
auth()->user()->isDeveloper()
My model
public function isDeveloper()
{
return ($this->type == 'TP001');
}
但还是不行,有什么办法可以正确地给出上述条件吗?提前致谢,抱歉我的英语不好。
My Kernel
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\Frontend::class,
];
您可以像这样在任何 blade 文件中获取当前用户:
{{ Auth::user()->name }}
在您的 blade 中执行此操作:
@if(Auth::check() && Auth::user()->type == 'TP001')
/* Some code here...*/
@endif
在您的中间件中按照您的要求执行此操作!:
if (\Auth::check() && \Auth::user()->type == 'TP001') {
$menu->add("User Control",array('nickname' => "user",'class'=>'treeview'))
->append(' <b class="caret"></b>')
->prepend('<span class="glyphicon glyphicon-user"></span> ');
$menu->user->add('Daftar User','user/list');
$menu->user->add('Tipe User','user/type');
} else {
/* Some code here...*/
}
中间件内核有你发布的 $middleware
,每个请求中都有 运行 的中间件,但它们 运行 在路由中间件之前(你 select 在路线定义)。
您可能正在使用 "web" 中间件组。尝试在最后添加您的自定义中间件。我认为 Laravel 5.4 中的默认值是:
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\Frontend::class, // <-- your middleware at the end
],
'api' => [
'throttle:60,1',
'bindings',
],
];
这样您就知道您的中间件将 运行 排在其他中间件之后(启动会话并检查身份验证的中间件)
您可以像这样将自定义中间件放在内核文件中受保护的 $routeMiddleware = [ ] 数组中
$routeMiddleWare = ['frontend' => \App\Http\Middleware\Frontend::class]
之后您将能够访问您的 Auth::check 并且不要忘记输入
Route::group(['middleware' => ['frontend']], function() { // your routes will go here.. });