2016-04-19 14 views
2

Ich benutze Laravel 5.2 und Zizaco/entrust 5.2, meine Frage ist:
Wie bekomme ich die Rolle des aktuellen Benutzers bei der Verwendung Zizaco/entrust?Laravel 5.2: Wie bekomme ich die Rolle des aktuellen Benutzers, wenn ich 'Zizaco/trust' benutze?

NameAndRole.php

namespace App\Services; 

use App\User; 
use App\Role; 
use Zizaco\Entrust\EntrustRole; 
use Illuminate\Support\Facades\Cache; 

class NameAndRole 
{ 
    public $username; 
    public $role; 

    public function __construct() { 
     $user = \Auth::user(); 
     $this->username = $user->name; 
     $this->role =$user->roles->first()->name; 
    } 
} 

Modelle:

Rolle: https://github.com/Zizaco/entrust#role

<?php namespace App; 

use Zizaco\Entrust\EntrustRole; 

class Role extends EntrustRole 
{ 
} 

Benutzer: https://github.com/Zizaco/entrust#user

<?php 

use Zizaco\Entrust\Traits\EntrustUserTrait; 

class User extends Eloquent 
{ 
    use EntrustUserTrait; // add this trait to your user model 

    ... 
} 

Ansicht: sidebar.blade.php

@inject('details','App\Services\NameAndRole') 
{{ $details->username }} 
{{ $details->role }} 

Fehler:

ErrorException in NameAndRole.php line 20: 
Trying to get property of non-object (View: D:\wnmp\www\laravel-entrust\resources\views\employer\partials\sidebar.blade.php) (View: D:\wnmp\www\laravel-entrust\resources\views\employer\partials\sidebar.blade.php) 

Antwort

5

Sie es wie jede andere Beziehung in beredten zugreifen können. So um die Rollen eines Benutzers zugreifen können Sie tun:

$user->roles 

Dies gibt ein beredtes Sammlung als User viele Role s haben kann (dh es wird nicht nur eine sein), wenn Sie also nur erwar eine Rolle, und Sie den String-Wert es möchten, können Sie tun:

$user->roles->first()->name // or display_name 

ich denke, man es in ein Array umwandeln könnte toArray() Methode verwenden, wenn Sie mit einem Array arbeiten wollte statt:

$user->roles->toArray() 

bearbeiten

Sie könnten die Benutzer überprüfen hat eine Rolle, bevor er die Zuordnung:

$this->role = $user->roles ? $user->roles->first()->name : 'No role'; 
+0

Es ist ein Fehler, ich einige Codes hinzugefügt über. – zwl1619

+0

Der Benutzer hat eine Rolle, oder? Wenn Sie diese Art von Fehler erhalten, wird Ihnen mitgeteilt, dass Sie versuchen, auf Eigenschaften auf etwas zuzugreifen, das nicht existiert. Ich nehme an, hier Rolle oder Benutzer existiert nicht. Sie können also 'dd ($ user-> roles)' oder 'dd ($ user-> roles-> first() -> name;)' vor dem Übergeben an Ihre Ansicht versuchen. Siehe meine Antwort auch bearbeiten. – haakym

+0

Das Ergebnis von 'dd ($ user-> roles-> first() -> name);' ist: 'Versuche, die Eigenschaft von Nicht-Objekten zu erhalten. Muss ich auch die Beziehung zwischen Benutzer und Rollen in Benutzer definieren .php, wenn ich 'Zizaco/trust' benutzt habe? – zwl1619

-1

die Rollen id Feld zu erhalten:

$user->roles->first()->id; 
+1

Können Sie Ihre Antwort verbessern, indem Sie erklären, wie Ihr Code das Problem löst? –

Verwandte Themen