I am trying to get my project to use authorization roles to restrict users to certain featuers and I am following along with a tutorial. When I make a call to a class in my user.php file I am getting an error that the class AppRole can’t be found. I am not sure if it is a namespace issue but I can’t get to the bottom of it. I believe it is the roles function that is giving me this issue.
<?php namespace EliteWorker; use IlluminateNotificationsNotifiable; use IlluminateContractsAuthMustVerifyEmail; use IlluminateFoundationAuthUser as Authenticatable; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'address', 'phone', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; public function roles() { return $this->belongsToMany('AppRole'); } public function hasAnyRoles($roles){ return null !== $this->roles()->whereIn('name', $roles)->first(); } public function hasAnyRole($role){ return null !== $this->roles()->where('name', $role)->first(); } }
Advertisement
Answer
You changed the namespace to EliteWorker
so if the Model class Role
is generated with Artisan, it’ll also have that namespace
public function roles() { return $this->belongsToMany('EliteWorkerRole'); }
Note that you can also get the model base name by calling the class static property
public function roles() { return $this->belongsToMany(Role::class); }
No need to import it if it’s in the same namespace
Also note that the artisan command app:name
has been removed in Laravel 6 to encourage developers to use the generic App
namespace