Blade auth()->user() 试图获得 属性 的 non-object
Blade auth()->user() Trying to get property of non-object
我正在使用 spatie 权限包:https://github.com/spatie/laravel-permission
虽然方法 hasAnyPermission
确实存在,但程序包没有检查用户是否有任何权限的指令。
我正在尝试在 blade 中使用以下条件:
@if (auth()->user()->hasAnyPermission(['View Users', 'View Roles']))
这导致 Trying to get property of non-object
错误。
为什么会这样?
编辑
我要 post 布局中的更多代码:
@if (auth()->guest())
<!-- Guest Menu -->
<li {{ (request()->is('login') ? 'class=active' : '') }}><a href="{{ route('login') }}">Login</a></li>
@if (config('lion.allow_registration'))
<li {{ (request()->is('register') ? 'class=active' : '') }}><a href="{{ route('register') }}">Register</a></li>
@endif
@else
<!-- Auth Menu -->
@if (auth()->user()->hasAnyPermission(['View Users', 'View Roles']))
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
Settings <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
@can('View Users')
<li {{ (request()->is('users') ? 'class=active' : '') }}><a href="{{ route('users') }}">Users</a></li>
@endcan
@can('View Roles')
<li {{ (request()->is('roles') ? 'class=active' : '') }}><a href="{{ route('roles') }}">Roles</a></li>
@endcan
</ul>
</li>
@endif
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
{{ auth()->user()->name }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li {{ (request()->is('profile') ? 'class=active' : '') }}><a href="{{ route('profile') }}">Profile</a></li>
<li><a href="{{ route('logout') }}">Logout</a></li>
</ul>
</li>
@endif
此代码在没有条件语句 @if (auth()->user()->hasAnyPermission(['View Users', 'View Roles']))
.
的情况下也能完美运行
我最终只是为此创建了一个自定义 blade 指令:
Blade::directive('hasanypermission', function ($permissions) {
$permissions = explode(',', $permissions);
$conditional = [];
foreach ($permissions as $permission) {
$conditional[] = "Gate::check($permission)";
}
return "<?php if (".implode(' || ', $conditional)."): ?>";
});
Blade::directive('endhasanypermission', function () {
return '<?php endif; ?>';
});
使用方法:
@hasanypermission('Read Users', 'Read Roles')
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
Settings <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
@can('Read Users')
<li {{ (request()->is('users') ? 'class=active' : '') }}><a href="{{ route('users') }}">Users</a></li>
@endcan
@can('Read Roles')
<li {{ (request()->is('roles') ? 'class=active' : '') }}><a href="{{ route('roles') }}">Roles</a></li>
@endcan
</ul>
</li>
@endhasanypermission
我正在使用 spatie 权限包:https://github.com/spatie/laravel-permission
虽然方法 hasAnyPermission
确实存在,但程序包没有检查用户是否有任何权限的指令。
我正在尝试在 blade 中使用以下条件:
@if (auth()->user()->hasAnyPermission(['View Users', 'View Roles']))
这导致 Trying to get property of non-object
错误。
为什么会这样?
编辑
我要 post 布局中的更多代码:
@if (auth()->guest())
<!-- Guest Menu -->
<li {{ (request()->is('login') ? 'class=active' : '') }}><a href="{{ route('login') }}">Login</a></li>
@if (config('lion.allow_registration'))
<li {{ (request()->is('register') ? 'class=active' : '') }}><a href="{{ route('register') }}">Register</a></li>
@endif
@else
<!-- Auth Menu -->
@if (auth()->user()->hasAnyPermission(['View Users', 'View Roles']))
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
Settings <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
@can('View Users')
<li {{ (request()->is('users') ? 'class=active' : '') }}><a href="{{ route('users') }}">Users</a></li>
@endcan
@can('View Roles')
<li {{ (request()->is('roles') ? 'class=active' : '') }}><a href="{{ route('roles') }}">Roles</a></li>
@endcan
</ul>
</li>
@endif
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
{{ auth()->user()->name }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li {{ (request()->is('profile') ? 'class=active' : '') }}><a href="{{ route('profile') }}">Profile</a></li>
<li><a href="{{ route('logout') }}">Logout</a></li>
</ul>
</li>
@endif
此代码在没有条件语句 @if (auth()->user()->hasAnyPermission(['View Users', 'View Roles']))
.
我最终只是为此创建了一个自定义 blade 指令:
Blade::directive('hasanypermission', function ($permissions) {
$permissions = explode(',', $permissions);
$conditional = [];
foreach ($permissions as $permission) {
$conditional[] = "Gate::check($permission)";
}
return "<?php if (".implode(' || ', $conditional)."): ?>";
});
Blade::directive('endhasanypermission', function () {
return '<?php endif; ?>';
});
使用方法:
@hasanypermission('Read Users', 'Read Roles')
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
Settings <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
@can('Read Users')
<li {{ (request()->is('users') ? 'class=active' : '') }}><a href="{{ route('users') }}">Users</a></li>
@endcan
@can('Read Roles')
<li {{ (request()->is('roles') ? 'class=active' : '') }}><a href="{{ route('roles') }}">Roles</a></li>
@endcan
</ul>
</li>
@endhasanypermission