我对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在该特性中应用自动解析时,它会尝试初始化哪个不起作用。因此,如果你想要达到你想要的水平,你的方法是转换到一个班级,而不是在这里使用特质。 –