我收到此错误
"在非对象"上调用成员函数isATeamManager()。
(RedirectIfNotAManager.php)
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Closure;
class RedirectIfNotAManager
{
public function handle($request, Closure $next)
{
if(!$request->user()->isATeamManager())
{
return redirect('articles');
}
return $next($request);
}
}
我用Google搜索并没有得到任何解决方案,因为我是laravel的新手,请帮助我解决这个问题。在laravel 5.1中。我尝试了其他示例,但仍然遇到此错误..
(这是User.php模型代码:)
<?php
namespace App;
class User extends Model implements AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
protected $table = 'users';
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password', 'remember_token'];
public function articles()
{
return $this->hasMany('App\Article');
}
public function isATeamManager()
{
return false;
}
}
答案 0 :(得分:1)
这意味着您的请求没有存储用户。因此,没有人登录或您的会话无法正常工作。 $request->user()
是一个运行以尝试拉当前用户的函数,默认情况下,如果有人登录,它将返回用户对象或我认为的空值。所以很可能你会得到一个空值。您可以将if语句更改为:
if(!$request->user() || !$request->user()->isATeamManager()) {
答案 1 :(得分:0)
我得到了解决方案..
这是有效的!!
公共函数句柄($ request,Closure $ next)
{
if($ request-&gt; user()){//如果用户未登录,则返回null,结果为false
if (!$request->user()->isATeamManager()) {
return redirect('articles');
}
}
return $next($request);
}
}