我對Laravel比較新,我創建了一箇中間件和策略來處理我的項目中的'Ownable'雄辯對象。Laravel依賴注入基類
我該使用特點做:
trait Ownable
{
public function user(){
return $this->belongsTo(User::class, 'created_by');
}
}
在我的政策,我只是這樣做:
class RightPolicy
{
use HandlesAuthorization;
public function update(User $user, Ownable $ownable)
{
return $ownable->created_by == $user->id;
}
}
而我的中間件,在我的控制器分配到正確的動作:
class CheckRights
{
public function __construct(Route $route, Ownable $object) {
$this->route = $route;
$this->object = $object;
}
public function handle($request, Closure $next)
{
// @TODO handle request
}
}
然後我創建了一個使用Ownable特徵的類:
class Thread extends Model
{
use Ownable;
}
然而,當我嘗試運行具有這種結構的項目,Laravel的依賴注入trhows錯誤:
Target [App\Ownable] is not instantiable while building App\Http\Middleware\CheckRights
有沒有辦法讓依賴注入知道實例權類(可能使用路線或別的東西)?
如果沒有,是否有一個方便的方式來做別的事情,而不依賴注入器來確保正確的類被實例化?
根據定義,特徵不是可實例化的。我不認爲你需要特質在這裏,它更多關於類和擴展 –
我明白,我在這裏使用特徵爲多態性原因。一個線程是可持有的,但也是可以評論的,但是,一個ForumRule不是可持有的,但是可以評論(例如)。這就是我選擇這種結構的原因。 @VincentDecaux – Joas
使用Trait的結果總是可以作爲有效的類自行編寫出來。當Laravel在該特性中應用自動解析時,它會嘗試初始化哪個不起作用。因此,如果你想要達到你想要的水平,你的方法是轉換到一個班級,而不是在這裏使用特質。 –