2016-12-19 23 views
5

Tôi có lớp cơ sở như thế này:Laravel chứa dịch vụ là nó có thể liên kết với lớp VÀ tất cả tổ tiên của nó - giống như trong Symfony

class BaseAPI 
{ 

    public function __construct(Client $client, CacheInterface $cache, $apiBaseUri) 
    { 
     $this->client = $client; 
     $this->apiBaseUri = $apiBaseUri; 
     $this->cache = $cache; 
    } 
} 

Và sau đó trong cung cấp dịch vụ:

class APIServiceProvider extends ServiceProvider 
{ 
    public function register() 
    { 
     $this->app 
     ->when(BaseAPI::class) 
     ->needs('$apiBaseUri') 
     ->give(env('DEFAULT_API_URI','')); 
    } 
} 

Đó là làm việc . Nhưng khi tôi đang tạo tổ tiên:

class GetLocations extends BaseAPI 
{ 
    protected $apiMethodName = 'locations'; 
    protected $type = 'get'; 
} 

Tôi gặp lỗi. Tất nhiên tôi có thể tự viết mã cho từng tổ tiên, nhưng có rất nhiều trong số chúng, do đó, câu hỏi là: có cơ chế thừa kế nào để ràng buộc không? Một cái gì đó như thế này: https://symfony.com/doc/current/service_container/parent_services.html

+0

Nếu có thể trong symfony, có thể có trong Laravel –

Trả lời

0

Bạn đã cố gắng sử dụng giao diện cho điều này chưa?

class BaseAPI implements APIInterface 
{ 
} 

class APIServiceProvider extends ServiceProvider 
{ 
    public function register() 
    { 
     $this->app 
     ->when(APIInterface::class) 
     ->needs('$apiBaseUri') 
     ->give(env('DEFAULT_API_URI','')); 
    } 
} 
Các vấn đề liên quan