Trong bài trước, tôi đã giải thích cách laravel xử lý các yêu cầu? Bây giờ, hãy xem cách Nhà cung cấp dịch vụ hoạt động trong ứng dụng web.
Nhà cung cấp dịch vụ là gì?
Nhà cung cấp dịch vụ là yếu tố cốt lõi khởi tạo tất cả các ứng dụng laravel, bao gồm cả các thành phần cốt lõi. Đăng ký các liên kết đến vùng chứa dịch vụ, trình nghe sự kiện, phần mềm trung gian và thậm chí cả các tuyến đường. Nhà cung cấp dịch vụ là nơi ứng dụng của bạn được định cấu hình. Đây cũng là nơi bạn khai báo các nhà cung cấp dịch vụ khi bạn muốn viết chúng sau này. Hoặc sử dụng các gói từ packagist, nơi bạn cũng thường cần khai báo một nhà cung cấp dịch vụ mới.
Nhà cung cấp dịch vụ trong laravel
Hãy quay lại bài viết trước trong phần Xử lý Yêu cầu. Phân đoạn này được xen kẽ giữa laravel nhận yêu cầu và gửi yêu cầu đến bộ định tuyến. Đây là nơi quá trình bootstrap bắt đầu.
Bạn có thể thấy nó trong Illuminant foundation application.php, hàm này sẽ tải bootstrap. Các bootstrappers ở đây được lấy từ hàm $ this-> bootstrappers (). Đây là các lớp sau:
Mở tệp tin Illination foundation application.php và điều hướng đến hàm bootstrapwith, bạn sẽ thấy rằng hàm sẽ tạo các bootstraps được liệt kê ở trên và sau đó tải chúng vào ứng dụng của bạn.
Bây giờ chúng ta sẽ xem cách hoạt động của Nhà cung cấp dịch vụ laravel. Chúng tôi chắc chắn rằng có một chức năng bootstrap trong mọi bootstrap.
Tại đây, chúng tôi nhập lớp Illinate foundation bootstrap registerproviders :: class để xem nhà cung cấp dịch vụ thực hiện những gì cho ứng dụng của chúng tôi:
Trong phần đầu tiên của quá trình xử lý, $ nhà cung cấp của chúng tôi sẽ trả về một kết quả là danh sách các nhà cung cấp nằm trong khóa ‘nhà cung cấp’ và bắt đầu bằng Illination \ trong config / app.php.
Trong lần xử lý thứ hai, laravel sẽ đưa nhà cung cấp có được vào hàm
Gửi đến nhà cung cấp có được ở trên. Chúng ta sẽ xem những nhà cung cấp là nhà cung cấp trong chức năng trên. chiếu sáng base packagemanifest.php:
Xem getmanifest
Hãy nhớ ở trên, chúng tôi tạo một lớp packagemanifest và không chuyển gì cho nó. Sau đó, phương thức khởi tạo của nó cũng không là gì cả. Vì vậy, trong hàm getmanifest (), thuộc tính $ this-> tệp kê khai ở đây không hợp lệ.
Khởi tạo một phiên bản từ ứng dụng laravel
laravel khởi tạo một phiên bản packagemanifest.
Trước tiên, hãy lưu ý một điều, laravel sử dụng tính năng này trước khi quá trình bootstrapping diễn ra. Vậy lớp packagemanifest bây giờ có gì? ?
Chúng tôi quan tâm đến hàm nhà cung cấp, vì vậy chúng tôi cần biết tham số thứ ba trong hàm tạo là gì, là $ manifestpath. Như chúng ta có thể thấy, tương ứng:
Bây giờ chúng ta hiểu rằng giá trị của $ this-> manifestpath là chuỗi bootstrap / cache / package.php , hãy chuyển sang xem nhà cung cấp dịch vụ sẽ làm gì tiếp theo. Mở tệp bootstrap / cache / package.php, chúng ta thấy một mảng chứa các cặp mảng khác có khóa là ‘nhà cung cấp’ và ‘bí danh’. Hàm nhà cung cấp của chúng tôi lấy khóa là “nhà cung cấp” ở đây, chúng ta có thể hiểu rằng laravel sẽ lấy nó bằng cách đặt nhà cung cấp có tiền tố là Illinant \ trong config / app.php và bằng cách liệt kê danh sách nhà cung cấp trong caches / package.php Tất cả các nhà cung cấp trong của chúng tôi ứng dụng. Sau khi thu thập tất cả các nhà cung cấp, chúng tôi trả về hàm registererconfiguredproviders () :
Trong chức năng này, tất cả các sự kiện được đăng ký khi nhà cung cấp được tải, sau đó mỗi nhà cung cấp sẽ được đăng ký bằng cách gọi hàm đăng ký trong lớp ứng dụng:
Trong chức năng đăng ký của lớp ứng dụng, mỗi nhà cung cấp dịch vụ sẽ gọi phương thức đăng ký của riêng mình.
Nếu bạn nhận thấy, trong các nhà cung cấp trong phương thức đăng ký, chúng tôi thường sử dụng các ràng buộc trong hàm này, nhưng nếu nhà cung cấp của bạn có thuộc tính $ bindings hoặc $ singletons, thì laravel sẽ tự động liên kết với cặp giá trị khóa này.
Tại đây, ứng dụng của bạn tải tất cả các nhà cung cấp này nếu chúng chưa được tải. Nếu không, nó chỉ tải nhà cung cấp mới. Thay vì phải bắt đầu một công việc từ đầu, nó sẽ không làm lại, chỉ là một công việc mới.
Giải thích ngắn gọn dễ hiểu và cho phép bạn hình dung rõ hơn. Ví dụ, chúng tôi có gói máy tính để bàn bao gồm cpu, chuột, bàn phím … bạn muốn thêm màn hình hoặc thay bàn phím cơ khác thì chỉ cần cắm là chạy. Không cần phải xây dựng lại máy tính của bạn từ đầu.
Cũng bằng cách sử dụng laravel, sau khi thực hiện bootstrapping lần đầu tiên, các gói / thư viện hiện có đã sẵn sàng để sử dụng.
Giả sử bạn muốn cài đặt các gói / thư viện khác, thì laravel chỉ cần tải lại các gói mới này và đăng ký các nhà cung cấp tương ứng cho chúng trong ứng dụng của bạn. Vì vậy, chúng tôi hiểu việc đăng ký nhà cung cấp như sau:
Vì vậy, chúng tôi thường thấy các nhà cung cấp có các phương thức như khởi động hoặc đăng ký nhưng không có phương thức nào khác, tất cả là do laravel được thiết kế theo cách đó. Bạn đã sử dụng lệnh đó để thêm các gói / thư viện bên ngoài và sau đó thêm nhà cung cấp của chúng trong config / app.php không?
Thông thường, chúng tôi chỉ cần nhập nó và sử dụng nó mà không cần biết tại sao nó hoạt động. Thực ra câu hỏi này laravel giúp ích cho tất cả chúng ta.
Tóm tắt
Nhà cung cấp dịch vụ là một khái niệm khá trừu tượng và là phần quan trọng nhất trong quy trình xử lý yêu cầu của laravel. Thông thường, nhà cung cấp dịch vụ là phần quan trọng nhất của quá trình khởi động ứng dụng .
Xem thêm các công việc laravel lương cao hấp dẫn tại đây