2016-10-20 14 views
2

誰かが私に問題を解決させることができますか?Laravel 5.3:管理ダッシュボードにアクセスできない

Laravelでは、ユーザーが自分の役割に応じてログインできる領域を1つ作成しています。

authを作成するためにartisanコマンドを使用しましたが、これまでのところかなり簡単でした。

次に、DBのテーブル「users」のテーブル名と主キーを変更することから始めました。 これを行うには、ユーザーモデル(artisanコマンドによって自動的に生成される)を更新し、モデルに「テーブル」がどこにあり、どのテーブルがそのテーブルの主キーであるかをモデルに知らせる必要があります。この後

protected $table = 'users'; 
protected $primaryKey = 'userID'; 

私はブラウザに移動し、通常のログインを行うと、それは私が管理ダッシュボードにアクセスできていないと私は非のプロパティを取得しようとしているとプロンプト取得していますオブジェクト。

これは私が前にやったように、テーブルと主キー一度に変更されているという事実から来て、「$このは」もはやオブジェクトコンテキストではありません。

どうすればいいですか?

User.php:

class User extends Authenticatable 
{ 


(...) public function isAdmin(){ 


     if($this->roles->Role_Type == "Admin" && $this->is_active == 1){  //this one is the line 83 where the error is 


      return true; 

     } 


     return false; 



    } 




(...) 

} 
+0

あなたは 'PHPの職人ダンプ-autoload'を試したことがありますか? – henrik

+0

私は今試しましたが、問題は引き続き続きます。 実際には 'composer dump-autoload' – brotherperes

+0

代わりに職人のコマンドを使うべきです。 Laravelsでコンパイルされたソースをクリアします。 完全な例外メッセージとは何ですか? – henrik

答えて

0

このパッケージを試してみてくださいそれは、この方法を働いた:

はDBに行って、強力な関係(FKS)を削除したの間で定評これらのテーブルは、開発者にとっては常に苦痛であり、そこにコードを置くためにはるかに多くのコードが必要です。

すべてのヘルプと怒鳴るのためのあなたのすべてに感謝を使用し、うまく働いたコードです:

<?php 

namespace App; 

use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 

    // 
    protected $table = 'users'; 
    protected $primaryKey = 'userID'; 

    protected $fillable = [ 
     'name', 
     'email', 
     'password', 
     'roleID', 
     'photoID', 
     'is_active' 
    ]; 

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



    public function role(){ 

     return $this->belongsTo('App\Role', 'roleID'); 


    } 



    public function photo(){ 


     return $this->belongsTo('App\Photo', 'photoID'); 


    } 




// public function setPasswordAttribute($password){ 
// 
// 
//  if(!empty($password)){ 
// 
// 
//   $this->attributes['password'] = bcrypt($password); 
// 
// 
//  } 
// 
// 
//  $this->attributes['password'] = $password; 
// 
// 
// 
// 
// } 



    public function isAdmin(){ 


     if($this->role->Role_Type == "Admin" && $this->is_active == 1){ 


      return true; 

     } 


     return false; 



    } 



    public function posts(){ 


     return $this->hasMany('App\Post'); 


    } 



    public function getGravatarAttribute(){ 


     $hash = md5(strtolower(trim($this->attributes['email']))) . "?d=mm&s="; 
     return "http://www.gravatar.com/avatar/$hash"; 


    } 





} 
1

あなたは、このコードのエラー

$this->roles->Role_Type 

"の$ this - >役割は、" そのユーザに対応する役割を返し、その後、あなたはフィールド「Role_Typeをとっています"

scenerioには、そのユーザーに関連付けられたロールはありません。

だから、この "$ this-> roles"はnullを返します。

「Role_Type」の値を取ることができませんでした。これによりエラーが発生します。あなたは、次の

if($this->roles != null && $this->roles->Role_Type && $this->is_active == 1) {   
    return true; 
} else { 
    return false; 
} 

注意しなければならない

:あなたのコードと連携するには、1体の関係を持っています。

Class User extends Model 
{ 
    public function roles() 
    { 
     return $this->hasOne('App\Role'); 
    } 
} 

あなたはeffecient方法で役割と権限を使用したい場合は、https://github.com/romanbican/roles

関連する問題