2016-01-07 34 views
5

Tôi đang làm việc trên một ứng dụng Laravel 5 và bây giờ mã của ứng dụng được cho là được sử dụng lại trong nhiều ứng dụng laravel 5, đó là lý do tại sao tôi tạo một gói trình soạn thảo và sau đó tôi muốn cài đặt gói này các ứng dụng của Laravel 5 có cùng chức năng và xây dựng nó.Làm thế nào để bootstrap laravel 5 nhà cung cấp dịch vụ từ gói nhà cung cấp chính nó?

Tôi mới phát triển gói soạn nhạc và đặc biệt là ghép các gói vào Laravel 5 bằng cách sử dụng Nhà cung cấp dịch vụ. Cho đến nay tôi đã biết được rằng nếu tôi sử dụng một nhà cung cấp dịch vụ như hình dưới đây, tôi sẽ có thể sử dụng các tuyến đường trong việc áp dụng laravel 5:

<?php 

namespace Uppdragshuset\AO\Tenant; 

use Illuminate\Support\ServiceProvider; 

class TenantServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     include __DIR__.'/routes.php'; 
    } 
} 

Bây giờ để làm công việc này, tôi chỉ yêu cầu các gói qua nhà soạn nhạc vào bất kỳ thương hiệu mới Laravel 5 cài đặt và sau đó tôi chỉ cần cập nhật mảng của nhà cung cấp trong app.php với điều này:

Uppdragshuset\AO\Tenant\TenantServiceProvider::class 

Điều này làm cho ý nghĩa với tôi và làm việc quá. Nhưng bây giờ gói mà tôi đang phát triển cũng có các phụ thuộc của riêng nó và nhiều gói phụ thuộc cũng có các nhà cung cấp dịch vụ laravel 5, vì vậy tôi phải bao gồm tất cả chúng trong cài đặt laravel5 để làm cho chúng hoạt động.

Nhưng tôi đoán có phải là cách để đăng ký các nhà cung cấp dịch vụ phụ thuộc trong gói mà tôi đang tạo bằng cách nào đó để tôi chỉ cần đăng ký một nhà cung cấp mà tôi đã đề cập ở trên. Vấn đề là tôi không biết làm thế nào để làm điều này và không thể tìm thấy một tài liệu tham khảo tương tự bất cứ nơi nào. Làm cách nào để đăng ký nhiều nhà cung cấp dịch vụ từ chính gói nhà soạn nhạc?

Trả lời

6

Vì vậy, cuối cùng tôi đã tìm ra cách đăng ký nhà cung cấp dịch vụ phụ thuộc từ chính gói nhà soạn nhạc.

Tôi có chính TenantServiceProvider trong gói của tôi được cho là móc trong các tuyến đường vào ứng dụng chính và cũng chịu trách nhiệm xuất bản di chuyển, cấu hình, v.v.

Hóa ra tôi có thể đăng ký bất kỳ nhà cung cấp dịch vụ phụ thuộc qua các nhà cung cấp cùng sử dụng phương pháp register() trên App mặt tiền và gọi đó là trong phương thức đăng ký của chính TenantServiceProvider tôi như vậy:

public function register() 
{ 
    include __DIR__.'/routes.php'; 

    App::register(RepositoryServiceProvider::class); 
    App::register(\Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class); 
} 

Bằng cách này tôi chỉ phải đăng ký TenantServiceProvider trong mảng của nhà cung cấp trong tệp cấu hình app.php của ứng dụng laravel. Khi nó được gọi và phương thức đăng ký trên nó được gọi, tất cả các nhà cung cấp khác sẽ được đăng ký thông qua các cuộc gọi App::register(). Hy vọng điều này sẽ giúp một ai đó.

+0

Đúng, đây là cách để đi: bạn có thể đăng ký nhà cung cấp dịch vụ trong các nhà cung cấp dịch vụ. –

+0

Cảm ơn, tôi chỉ quản lý để ghi đè lên một nhà cung cấp dịch vụ laravel bằng cách sử dụng '$ this-> app-> register()' từ gói của tôi – myol

1

bạn có thể tạo tệp composer.json gói và thêm phụ thuộc vào đó cho gói chính vì vậy khi bạn soạn nhạc yêu cầu tác giả/gói, nó sẽ xem phụ thuộc của gói đó và yêu cầu chúng tự động bên dưới là ví dụ một yêu cầu cho một gói composer.json tôi thường kéo

"require": { 
    "php": ">=5.5.0", 
    "illuminate/console": "~5.0", 
    "illuminate/support": "~5.0", 
    "illuminate/cache": "~5.0" 

bạn có thể thêm các phương pháp sau đây để khởi động xuất bản cung cấp dịch vụ của bạn

public function boot() 
{ 
    $this->publishes([ 
     __DIR__ . '/config/configifyouhaveone.php' => config_path('pathtotheconfig.php') 
    ]); 
    AliasLoader::getInstance()->alias(
     'serviceprovidername', 
     'Namespace\Subfolder\PackageName\PackageFacade' 
    ); 
} 

sau đó bạn sẽ cần phải làm nhà cung cấp thợ thủ công php: xuất bản nên không cho nhận được rằng

+0

Tôi hiểu điều đó. Tôi đã làm điều đó rồi. Vấn đề của tôi nằm ở các nhà cung cấp dịch vụ của một số gói này. Nơi đăng ký nhà cung cấp dịch vụ? – Rohan

+0

Tôi chỉ cần kiểm tra mã tôi thấy bạn đã có có một cái nhìn tại liên kết sau đây [Laracasts Service Provider Example] (https://github.com/laracasts/PHP-Vars-To-Js-Transformer/blob/master /src/JavaScriptServiceProvider.php) @Rohan –

Các vấn đề liên quan