2015-06-23 20 views
7

Xin chào, tôi đang cố gắng phát triển một gói trong Laravel 5.1. Nhờ giúp đỡ ở đây tôi đã thiết lập cơ bản.Phát triển gói Laravel 5.1 - tải các gói phụ thuộc vào phát triển

Vấn đề hiện tại của tôi là cách tải phụ thuộc cho gói trong khi tôi đang phát triển nó.

Trong các gói composer.json Tôi đã thêm các phụ thuộc và đã cài đặt các gói này trong thư mục nhà cung cấp trong thư mục phát triển gói của tôi. Đây không phải là thư mục nhà cung cấp gốc của khung công tác.

Dưới đây là yêu cầu của tôi phần của gói composer.json:

"require": { 
"illuminate/support": "~5.1", 
"php" : ">=5.3.0", 
"google/apiclient": "dev-master" 
}, 

Bởi vì họ không phải là một phần của quá trình tự động load chính là cách tiếp cận tốt nhất để đảm bảo sự phụ thuộc đối với gói của tôi là những gì được nạp một cách chính xác từ bên trong thư mục phát triển ? Làm cách nào để bao gồm tính năng tự động tải? Tôi lo ngại rằng nếu tôi tham chiếu đến vị trí hiện tại của họ/không gian tên mà nó sẽ phá vỡ khi sau này được cài đặt như một gói trong ứng dụng khác.

trong mã của tôi, tôi có như sau:

$client = new \Google_Client($config); 

mang đến cho các lỗi:

Class 'Google_Client' not found 

tôi có thể nhận được vòng này bằng cách thêm sự phụ thuộc này đến composer.json chính nhưng không nghĩ rằng đó là cách tiếp cận chính xác để giữ cho phát triển gói độc lập (nếu điều đó có ý nghĩa)

Khi tôi phát triển trong L4.2 có bàn làm việc để xử lý việc tải c ourse không còn tính năng trong L5.1

Bất kỳ sự giúp đỡ và thực hành tốt nhất đánh giá cao

Trả lời

2

Because they are not part of the main autoload process

Tôi nghĩ rằng bạn hiểu lầm như thế nào phụ thuộc nhà soạn nhạc được quản lý. Khi trong tệp compose.json chính của bạn, bạn liệt kê một sự phụ thuộc, nhà soạn nhạc sẽ thêm nó vào quá trình tự động tải chính cũng như tất cả các phụ thuộc của chúng và các phụ thuộc của các phụ thuộc của chúng, và theo cách đệ quy.

Bạn không phải lo lắng về nơi phụ thuộc được lưu trữ hoặc cách Composer sẽ tải chúng. Composer sẽ tự động thêm chúng vào tệp tự động tải và tất cả những gì bạn phải làm là đảm bảo bạn yêu cầu tệp tự động tải của nhà soạn nhạc. Khi bạn yêu cầu tệp tự động tải của nhà soạn nhạc, tất cả các lớp và chức năng được trình soạn nhạc tải sẽ có sẵn. Miễn là bạn yêu cầu tệp composer autoload tất cả những gì bạn phải làm để sử dụng các lớp từ bất kỳ gói nào được cài đặt là đảm bảo bạn giải quyết chúng bằng cách sử dụng không gian tên thích hợp. Composer là đủ thông minh để biết nơi mà tất cả các lớp được lưu trữ và cách tải chúng (đó là những gì psr-0, psr-4, ... cho). Vì vậy, nếu bạn đang phát triển một gói Composer, hãy gọi nó là 'A' và bạn liệt kê gói 'C' là một trong những phụ thuộc của gói 'A', nhà soạn nhạc sẽ thêm nó vào tệp tự động tải cho bạn . Nếu bạn sử dụng một gói khác, cho phép nói, Laravel, trong đó có một sự phụ thuộc của bạn gói 'A', sau đó cũng gói 'C' sẽ có sẵn trong Laravel, vì nó là một phụ thuộc của 'A'.

I.e: Nếu đây là nhà soạn nhạc của bạn.tệp json

{ 
    "name": "foo/bar", 
    "require": { 
     "google/apiclient": "1.0.*" 
    } 
} 

Mã này sẽ làm việc

require_once __DIR__ . '/vendor/autoload.php'; 
$client = new Google_Client(); 
$youtube = new Google_Service_YouTube($client); 

Note Tôi đã yêu cầu các tập tin tự động load nhà soạn nhạc, mà có vẻ là vấn đề của bạn. Khi bạn đang sử dụng Laravel, nó sẽ thêm tập tin đó cho bạn.

+0

Điều đó đã có ý nghĩa và bây giờ - cảm ơn bạn – Ray

+0

Có vẻ như yêu cầu tệp tự động tải của trình soạn thảo của gói có thể được thực hiện từ phương thức khởi động của nhà cung cấp dịch vụ. – dannepanne

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