当前位置: 首页 > 知识库问答 >
问题:

调用成员函数isAdmin()在laravel中为空

佴博实
2023-03-14

我想基本验证,如果用户是管理员,然后请求下一步,否则重定向到主页

User.php:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','role_id','is_active','photo_id',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function role(){
        return $this->belongsTo('App\Role');
    }

    public function photo(){
        return $this->belongsTo('App\Photo');
    }

    public function isAdmin(){
        if ($this->role()->name=="administrator"){
            return true;
        }
        return false;
    }
}

最后一个函数是isAdmin()

一个dmin.php(这是中间件):

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class Admin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Auth::check()){

            if (Auth::user()->isAdmin()){

                return $next($request);

            }
        }

        return redirect('/');
    }
}

routes.php:

<?php

Route::get('/', function () {
    return view('welcome');
});


Route::get('/admin',function(){
    return view('admin.index');
});
Route::group(['middleware'=>'admin'],function(){

    Route::resource('/admin/users','AdminUsersController');

});




Route::auth();

Route::get('/home', 'HomeController@index');

我得到以下错误:

Admin.php第21行中的FatalErrorException:
调用null上的成员函数isAdmin()

我还添加了'admin'=


共有3个答案

越胤
2023-03-14

由于您没有任何角色,请首先在角色表中插入一些数据。

辛建业
2023-03-14

请尝试以下操作:将User.php模型上的方法更改为static。

    static function isAdmin(){
      if ($this->role()->name=="administrator"){
            return true;
       }
       return false;
    }

下一步:修改中间件,它应该可以工作。

  <?php

    namespace App\Http\Middleware;

    use Closure;

    class Admin
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            if (auth()->check()){

                if (\Admin::isAdmin()){

                    return $next($request);

                }
            }

            return abort(404); //redirect the user to not found page.
        }
    }
王亮
2023-03-14

这是因为没有用户会话。中间件仅在用户登录时工作。所以你需要先登录然后检查中间件

 类似资料:
  • 函数attach()有问题。我已经创建了3个表。1表用于添加电影。表2适用于电影类别。3表是电影ID和类别ID的集合。多对多的组合。 当我想添加一个新的视频类别从表格这我有错误- 视频控制器。php- 视频php模型 类别php模型 User.php模型(也许你需要一个User.php模型解决问题) 迁移-创建\u类别\u视频\u表。php 迁移-创建类别表。php 移民-create_video

  • 当我尝试使用facebook对用户进行身份验证时,我可以将数据存储到用户表中,但无法将数据创建到soical_帐户中。因此,在出现错误后,会出现“调用成员函数创建()on null”。谁能给我一个解决方案,说明我错在哪里。 在我的社会账户控制中,我有以下方法 在我的数据库迁移中,我有用户和social_accounts用户与social_accounts有一对多的关系。 用户表: Social_a

  • 本文向大家介绍浅析成员函数和常成员函数的调用,包括了浅析成员函数和常成员函数的调用的使用技巧和注意事项,需要的朋友参考一下 在Coordinate类中,有一个Display()成员函数和一个Display() const常成员函数,代码如下 Display()成员函数和一个Display() const常成员函数是互为重载的,那么如果我们直接像下面这样调用该方法,会调用的是哪个呢? 那么运行下程序

  • 我想创建一个函数来检查数据库中是否已存在用户。该函数存储在名为 checks 的 php 文件中并且必须返回一个值。 我的数据库.php文件: 我在另一个名为 的 php 文件中调用 错误出现在这个句子上:$sth=$con- 我在< code>checks.php文件中试过: < li >将代码从< code>database.php移动到checks.php < li >设置< code >错

  • 我有一个密码: 我正在尝试使用toSql()将laravel查询转换为mysql 但我犯了一个错误,比如 对整数调用成员函数toSql() 然后我尝试了 但它返回的输出为'false',我无法得到预期的输出。我不知道为什么会发生这种情况。任何帮助都将不胜感激。 预期产出:

  • 最近在review代码的时候发现,使用了空指针调用成员函数,并且成员函数内部有使用到成员变量,居然没有出错。很是奇怪,就用一篇博客把关于空指针调用成员函数相关的内容总结起来。 空指针调用成员函数 调用普通成员函数 如果空指针调用普通成员函数,看该函数体中是否使用到了this指针(是否访问非静态成员变量)。如果使用到了this指针,程序会崩溃;如果没有使用到this指针,程序不会崩溃。当然,如果访问