Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel
Code

Làm thế nào để đăng ký và sử dụng Laravel Service Providers

by
Difficulty:IntermediateLength:LongLanguages:

Vietnamese (Tiếng Việt) translation by Thai An (you can also view the original English article)

Nếu bạn đã từng dùng qua framework Laravel, có thể bạn chưa từng nghe về các container dịch vụ và các nhà cung cấp dịch vụ. Trên thực tế, chúng là xương sống của framework Laravel và thực hiện tất cả việc khó khăn khi bạn khởi chạy một đối tượng của bất kỳ ứng dụng Laravel nào.

Trong bài viết này, chúng ta sẽ tìm hiểu sơ lược về những gì các container dịch vụ là tất cả về, và sau đó chúng ta sẽ thảo luận về các nhà cung cấp dịch vụ cụ thể. Trong bài viết này, tôi cũng sẽ trình bày cách tạo một nhà cung cấp dịch vụ tùy chỉnh trong Laravel. Khi bạn tạo một nhà cung cấp dịch vụ, bạn cũng cần phải đăng ký nó với ứng dụng Laravel để thực sự sử dụng nó, vì vậy chúng tôi cũng sẽ giới thiệu nó.

Có hai phương pháp quan trọng, khởi động và đăng ký, mà nhà cung cấp dịch vụ của bạn có thể thực hiện, và trong phần cuối cùng của bài viết này, chúng tôi sẽ thảo luận kỹ lưỡng hai phương pháp này.

Trước khi chúng ta đi sâu vào cuộc thảo luận của một nhà cung cấp dịch vụ, tôi sẽ cố gắng giới thiệu các container dịch vụ vì nó sẽ được sử dụng rất nhiều trong việc triển khai nhà cung cấp dịch vụ của bạn.

Hiểu các nhà cung cấp dịch vụ và nhà cung cấp dịch vụ

Thùng chứa dịch vụ là gì?

Nói một cách đơn giản, chúng ta có thể nói rằng container dịch vụ trong Laravel là một hộp chứa các ràng buộc các thành phần khác nhau, và chúng được phục vụ khi cần thiết trong suốt ứng dụng.

Trong các từ của tài liệu chính thức của Laravel:

Container dịch vụ Laravel là một công cụ mạnh mẽ để quản lý các phụ thuộc lớp và thực hiện tiêm phụ thuộc.

Vì vậy, bất cứ khi nào bạn cần tiêm bất kỳ thành phần hoặc dịch vụ tích hợp nào, bạn có thể nhập gợi ý vào phương thức khởi tạo hoặc phương thức của bạn và nó sẽ được tự động tiêm từ container dịch vụ vì nó chứa mọi thứ bạn cần! Đó không phải là mát mẻ? Nó giúp bạn tiết kiệm từ việc tự khởi tạo các thành phần và do đó tránh được việc ghép nối chặt chẽ trong mã của bạn.

Chúng ta hãy xem một ví dụ nhanh để hiểu nó.

Như bạn có thể thấy, SomeClass cần một cá thể của FooBar để tự khởi tạo. Vì vậy, về cơ bản, nó có một sự phụ thuộc cần phải được tiêm. Laravel thực hiện điều này một cách tự động bằng cách nhìn vào container dịch vụ và tiêm phụ thuộc thích hợp.

Và nếu bạn tự hỏi Laravel biết các thành phần hoặc dịch vụ nào sẽ bao gồm trong vùng chứa dịch vụ, câu trả lời là nhà cung cấp dịch vụ. Đó là nhà cung cấp dịch vụ cho Laravel biết ràng buộc các thành phần khác nhau vào trong container dịch vụ. Trong thực tế, nó được gọi là ràng buộc container dịch vụ, và bạn cần phải thực hiện nó thông qua nhà cung cấp dịch vụ.

Vì vậy, đó là nhà cung cấp dịch vụ đăng ký tất cả các ràng buộc container dịch vụ, và nó được thực hiện thông qua phương thức đăng ký của việc thực hiện nhà cung cấp dịch vụ.

Điều đó sẽ mang lại một câu hỏi khác trên bảng: Laravel biết gì về các nhà cung cấp dịch vụ khác nhau? Bạn vừa nói gì sao? Tôi vừa nghe ai đó nói vậy, Laravel cũng nên tự động tìm ra điều đó! Oh boy, đó là quá nhiều để yêu cầu: Laravel là một framework không phải là một siêu nhân, phải không? Nói cách khác, đó là điều bạn cần để thông báo cho Laravel một cách rõ ràng.

Hãy tiếp tục và xem nội dung của tệp config / app.php. Bạn sẽ tìm thấy một mục nhập mảng liệt kê tất cả các nhà cung cấp dịch vụ sẽ được nạp trong khi khởi động ứng dụng Laravel.

Vì vậy, đó là container dịch vụ theo ý của bạn. Từ phần tiếp theo trở đi, chúng tôi sẽ tập trung vào nhà cung cấp dịch vụ, đó là chủ đề chính của bài viết này!

Nhà cung cấp dịch vụ là gì?

Nếu vùng chứa dịch vụ là thứ gì đó cho phép bạn định nghĩa các ràng buộc và các phụ thuộc tiêm, thì nhà cung cấp dịch vụ là nơi nó xảy ra.

Hãy xem nhanh một trong những nhà cung cấp dịch vụ cốt lõi để hiểu những gì nó làm. Hãy tiếp tục và mở tệp vender / laravel / framework / src / Illuminate / Cache / CacheServiceProvider.php.

Điều quan trọng cần lưu ý ở đây là phương thức đăng ký, cho phép bạn định nghĩa các ràng buộc vùng chứa dịch vụ. Như bạn có thể thấy, có ba ràng buộc cho các dịch vụ cache, cache.store và memcached.connector.

Về cơ bản, chúng tôi đang thông báo cho Laravel rằng bất cứ khi nào có nhu cầu giải quyết mục nhập bộ nhớ cache, nó sẽ trả về phiên bản của CacheManager. Vì vậy, chúng tôi chỉ cần thêm một loại ánh xạ trong vùng chứa dịch vụ có thể được truy cập thông qua $ this-> app.

Đây là cách thích hợp để thêm bất kỳ dịch vụ nào vào một container dịch vụ Laravel. Điều đó cũng cho phép bạn nhận ra bức tranh lớn hơn về cách Laravel đi qua phương thức đăng ký của tất cả các nhà cung cấp dịch vụ và điền vào vùng chứa dịch vụ! Và như chúng tôi đã đề cập trước đó, nó chọn danh sách các nhà cung cấp dịch vụ từ tệp config / app.php.

Và đó là câu chuyện của nhà cung cấp dịch vụ. Trong phần tiếp theo, chúng ta sẽ thảo luận cách tạo một nhà cung cấp dịch vụ tùy chỉnh để bạn có thể đăng ký các dịch vụ tùy chỉnh của mình vào vùng chứa dịch vụ Laravel.

Tạo nhà cung cấp dịch vụ tùy chỉnh của bạn

Laravel đã đi kèm với một công cụ tiện ích dòng lệnh thực hành, thủ công, cho phép bạn tạo mã mẫu để bạn không phải tạo nó từ đầu. Tiếp tục và di chuyển đến dòng lệnh và chạy lệnh sau trong gốc ứng dụng của bạn để tạo một nhà cung cấp dịch vụ tùy chỉnh.

Và điều đó sẽ tạo ra tệp EnvatoCustomServiceProvider.php trong thư mục app / Providers. Mở tệp để xem tệp lưu trữ.

Như chúng ta đã thảo luận ở trên, có hai phương thức, khởi động và đăng ký, rằng bạn sẽ xử lý hầu hết thời gian khi bạn làm việc với nhà cung cấp dịch vụ tùy chỉnh của mình.

Phương thức đăng ký là nơi bạn xác định tất cả các ràng buộc vùng chứa dịch vụ tùy chỉnh của mình. Mặt khác, phương thức khởi động là nơi bạn có thể sử dụng các dịch vụ đã đăng ký thông qua phương thức đăng ký. Trong phần cuối của bài viết này, chúng ta sẽ thảo luận chi tiết hai phương thức này khi chúng ta sẽ xem xét một số trường hợp sử dụng thực tế để hiểu cách sử dụng của cả hai phương thức.

Đăng ký nhà cung cấp dịch vụ tùy chỉnh của bạn

Vì vậy, bạn đã tạo nhà cung cấp dịch vụ tùy chỉnh của mình. Thật tuyệt! Tiếp theo, bạn cần thông báo cho Laravel về nhà cung cấp dịch vụ tùy chỉnh của bạn để nó có thể tải nó cùng với các nhà cung cấp dịch vụ khác trong quá trình khởi động.

Để đăng ký nhà cung cấp dịch vụ, bạn chỉ cần thêm một mục nhập vào mảng của các nhà cung cấp dịch vụ trong tệp config / app.php.

Và đó là nó! Bạn đã đăng ký nhà cung cấp dịch vụ của mình với sơ đồ của Laravel! Nhưng nhà cung cấp dịch vụ mà chúng tôi đã tạo gần như là một mẫu trống và không sử dụng vào lúc này. Trong phần tiếp theo, chúng ta sẽ xem xét một số ví dụ thực tế để xem bạn có thể làm gì với các phương thức đăng ký và khởi động.

Đi qua các phương thức đăng ký và khởi động

Để bắt đầu, chúng tôi sẽ đi qua các phương pháp đăng ký để hiểu làm thế nào bạn thực sự có thể sử dụng nó. Mở ứng dụng tệp nhà cung cấp dịch vụ / Nhà cung cấp / EnvatoCustomServiceProvider.php đã được tạo trước đó và thay thế mã hiện tại bằng các mã sau.

Có hai điều quan trọng cần lưu ý ở đây:

  • Chúng tôi đã nhập App \ Library \ Services \ DemoOne để chúng tôi có thể sử dụng nó. Lớp DemoOne chưa được tạo, nhưng chúng tôi sẽ làm điều đó trong giây lát.
  • Trong phương thức đăng ký, chúng tôi đã sử dụng phương thức liên kết của vùng chứa dịch vụ để thêm ràng buộc vùng chứa dịch vụ của chúng tôi. Vì vậy, bất cứ khi nào sự phụ thuộc của App \ Library \ Services \ DemoOne cần được giải quyết, nó sẽ gọi hàm đóng, và nó khởi tạo và trả về đối tượng App \ Library \ Services \ DemoOne.

Vì vậy, bạn chỉ cần tạo tệp ứng dụng / Library / Services / DemoOne.php để làm việc này.

Và đây là mã ở đâu đó trong bộ điều khiển của bạn, nơi phụ thuộc sẽ được tiêm.

Đó là một ví dụ rất đơn giản về việc ràng buộc một lớp. Trong thực tế, trong ví dụ trên, không cần phải tạo một nhà cung cấp dịch vụ và thực hiện phương thức đăng ký như chúng ta đã làm, vì Laravel có thể tự động giải quyết nó bằng cách sử dụng sự phản chiếu.

Một lưu ý rất quan trọng từ tài liệu Laravel:

Không cần phải ràng buộc các lớp vào container nếu chúng không phụ thuộc vào bất kỳ giao diện nào. Vùng chứa không cần phải được hướng dẫn về cách xây dựng các đối tượng này, vì nó có thể tự động giải quyết các đối tượng này bằng cách sử dụng sự phản chiếu.

Mặt khác, nó sẽ thực sự hữu ích nếu bạn đã ràng buộc một giao diện với một triển khai nhất định. Hãy xem qua một ví dụ để hiểu nó.

Hãy tạo một giao diện rất đơn giản tại app / Library / Services / Contracts / CustomServiceInterface.php.

Tiếp theo, chúng ta hãy tạo hai triển khai cụ thể của giao diện này. Về cơ bản, chúng ta chỉ cần tạo hai lớp mở rộng giao diện CustomServiceInterface.

Tạo lớp DemoOne trong ứng dụng / Library / Services / DemoOne.php.

Tương tự, DemoTwo đi vào ứng dụng / Library / Services / DemoTwo.php.

Bây giờ, thay vì ràng buộc một lớp, chúng ta sẽ ràng buộc một giao diện. Xem lại EnvatoCustomServiceProvider.php và thay đổi mã như hình dưới đây.

Trong trường hợp này, chúng ta đã ràng buộc giao diện App \ Library \ Services \ Contracts \ CustomServiceInterface với việc triển khai DemoOne. Do đó, bất cứ khi nào App \ Library \ Services \ Contracts \ CustomServiceInterface phụ thuộc cần được giải quyết, nó sẽ khởi tạo và trả về đối tượng App \ Library \ Services \ DemoOne. Bây giờ nó có ý nghĩa hơn, phải không?

Hãy nhanh chóng sửa lại mã điều khiển.

Như bạn có thể đã đoán, $ customServiceInstance phải là cá thể của App \ Library \ Services \ DemoOne! Vẻ đẹp của cách tiếp cận này là bạn có thể trao đổi việc triển khai DemoOne với người khác một cách dễ dàng.

Giả sử bạn muốn sử dụng triển khai DemoTwo thay vì DemoOne. Trong trường hợp đó, bạn chỉ cần thực hiện các thay đổi sau trong nhà cung cấp dịch vụ EnvatoCustomServiceProvider.php.

Tìm dòng sau:

Và thay thế bằng:

Tương tự, tìm mục này:

Điều đó nên được thay thế bằng:

Cách tiếp cận tương tự có thể được sử dụng nếu bạn muốn thay thế bất kỳ triển khai lõi nào với chính bạn. Và nó không chỉ là phương pháp ràng buộc mà bạn có thể sử dụng cho các ràng buộc container dịch vụ của bạn; container dịch vụ Laravel cung cấp nhiều cách khác nhau để gắn vào container dịch vụ. Vui lòng kiểm tra tài liệu chính thức của Laravel để tham khảo đầy đủ.

Ứng cử viên tiếp theo là phương thức khởi động, mà bạn có thể sử dụng để mở rộng chức năng lõi của Laravel. Trong phương pháp này, bạn có thể truy cập tất cả các dịch vụ đã được đăng ký sử dụng phương thức đăng ký của nhà cung cấp dịch vụ. Trong hầu hết các trường hợp, bạn muốn đăng ký trình xử lý sự kiện của mình theo phương pháp này, điều này sẽ được kích hoạt khi có điều gì đó xảy ra.

Chúng ta hãy xem xét một vài ví dụ yêu cầu triển khai phương thức khởi động.

Bạn muốn thêm trình xác nhận trường biểu mẫu tùy chỉnh của riêng bạn vào Laravel.

Nếu bạn muốn đăng ký một nhà soạn nhạc xem, đó là nơi hoàn hảo để làm điều đó! Trong thực tế, chúng tôi có thể nói rằng phương pháp khởi động thường được sử dụng để thêm các nhà soạn nhạc xem!

Tất nhiên, bạn muốn nhập một mặt tiền Chiếu sáng \ Support \ Facades \ Xem trong nhà cung cấp dịch vụ của bạn ngay từ đầu.

Trong cùng một lãnh thổ, bạn cũng có thể chia sẻ dữ liệu trên nhiều chế độ xem!

Nó cũng có thể được sử dụng để xác định các ràng buộc mô hình rõ ràng.

Đây là một vài ví dụ để chứng minh việc sử dụng phương thức khởi động. Bạn càng nhận được nhiều hơn vào Laravel, bạn càng thấy nhiều lý do để thực hiện nó!

Và với điều đó, chúng tôi đã đạt đến cuối bài viết này. Tôi hy vọng bạn thích các chủ đề được thảo luận trong suốt bài viết này.

Phần kết luận

Đó là cuộc thảo luận của các nhà cung cấp dịch vụ là điểm thu hút trung tâm của bài viết này, mặc dù chúng tôi đã bắt đầu bài viết của chúng tôi với container dịch vụ vì đó là một thành phần quan trọng để hiểu nhà cung cấp dịch vụ.

Sau đó, chúng tôi đã phát triển một nhà cung cấp dịch vụ tùy chỉnh, và trong nửa sau của bài viết, chúng tôi đã đi qua một vài ví dụ thực tế.

Đối với những người trong số các bạn, hoặc chỉ mới bắt đầu với Laravel hoặc tìm cách mở rộng kiến ​​thức, trang web hoặc ứng dụng của bạn bằng các phần mở rộng, chúng tôi có nhiều thứ bạn có thể học tại Envato Market.

Nếu bạn có bất kỳ truy vấn hoặc nhận xét nào, chỉ cần viết vào feed ở bên dưới!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.