저는 Laravel에 비교적 익숙하며 내 프로젝트에서 'Ownable'Eloquent 객체를 처리하기위한 미들웨어와 정책을 만들었습니다. 기본 클래스를 사용한 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 특성을 사용하여 클래스를 만들었습니다 :
Target [App\Ownable] is not instantiable while building App\Http\Middleware\CheckRights
아마 사용 (종속성 인젝터가 올바른 클래스의 인스턴스를 알릴 수있는 방법이 있나요 :이 구조 프로젝트를 실행하려고하면
class Thread extends Model
{
use Ownable;
}
그러나, Laravel의 종속 인젝터는 오류가 trhows 경로 또는 뭔가 다른)?
그렇지 않은 경우, 올바른 클래스가 인스턴스화되었는지 확인하기 위해 종속성 인젝터가없는 다른 편리한 방법이 있습니까?
특성은 정의에 의해 인스턴스화 할 수 없습니다. 나는 여기에 특성이 필요하다고 생각하지 않는다. 클래스와 확장에 관한 것이 더 많다. –
나는 다형성을 이유로 여기에서 형질을 사용하고 있음을 이해한다. 스레드는 Ownable이지만 주석이 가능하지만 ForumRule은 소유 할 수 없지만 주석이 가능합니다 (예 :). 이것이 내가 이런 유형의 구조를 선택한 이유입니다. @VincentDecaux – Joas
특성 사용 결과는 항상 올바른 클래스로 작성할 수 있습니다. Laravel은 그 특성에 자동 해상도를 적용 할 때 작동하지 않는 init를 시도합니다. 그래서 당신이 원하는 지점으로 가고 싶다면 당신의 방법은 여기에 특성을 사용하는 대신 클래스로 전환하는 것입니다. –