2017-12-02 144 views
0

我有一個BaseRepository類,它的方法對所有模型都有效。唯一的問題是,用戶模型是從使用Illuminate \ Foundation \ Auth \ User派生而來的。所以它會拋出一個類型錯誤,因爲構造函數需要一個Illuminate \ Database \ Eleoquent \ Model實例。我該如何解決這個問題?Laravel 5.5:用戶模型上的依賴注入

這裏是我的UserRepository.php:

namespace App\Repositories\User; 

use App\Model\User; use App\Repositories\Base\BaseRepository; 

class UserRepository extends BaseRepository { 

public function __construct(User $user) 
{ 
parent::__construct($user); 
} 

} 

BaseRepository.php

namespace App\Repositories\Base; 

use App\User; 
use Illuminate\Database\Eleoquent\Model; 

class BaseRepository { 

public function __construct (Model $model) { 
    $this->model = $model; 
} 

public function all() { 

    return $this->model->orderBy('id','desc')->get(); 


} 


} 

這是錯誤:類型錯誤:傳遞給應用程序\庫\基地\ BaseRepository 參數1: :__ construct()必須是一個Illuminate \ Database \ Eleoquent \ Model實例,該實例是在C:\ wamp64 \ www \ adblog \ app \ Repositories \ User \ UserRepository.ph中給出的App \ User的實例,p

+0

我想你可以與上下文結合嘗試。所以當你的UserRepository類需要一個User時,你可以傳遞實際的用戶實例。 – Camilo

+0

你是否記得你的錯字?您的基類構造函數期望照明\數據庫\ Eleoquent \ Model或Illuminate \ Database \ Eloquent \ Model嗎? – Stefan

+0

用戶模型是一個'Illuminate \ Database \ Eloquent \ Model' ......你使用的所有模型都是'Illuminate \ Database \ Eloquent \ Model',這就是使它們成爲雄辯模型的原因,它們擴展了模型。 – lagbox

回答

1

自定義您的User模型這樣

use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Foundation\Auth\Access\Authorizable; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 

class User extends Model implements 
    AuthenticatableContract, 
    AuthorizableContract, 
    CanResetPasswordContract 
{ 
    use Authenticatable, Authorizable, CanResetPassword; 
} 
+0

謝謝! 但是這是來自Illuminate \ Foundation \ Auth – sammy

+0

的內容是的,只是爲了讓你的用戶模型擴展Eloquent \ Model而不是Illuminate \ Foundation \ Auth \ User? –

+0

但我需要認證。這工作正常。 – sammy