2011-11-04 21 views
6

Bây giờ tôi có thể gắn thẻ dịch vụ ví dụ: form.type phù thủy thông báo cho thành phần biểu mẫu để sử dụng dịch vụ này làm loại biểu mẫu.Làm cách nào để thêm các thẻ vùng chứa dịch vụ tùy chỉnh của riêng bạn và cách nhận các dịch vụ được gắn thẻ trong symfony2?

Tôi không thể tìm thấy bất kỳ tài liệu nào về điều này, làm cách nào tôi có thể xác định thẻ của riêng mình? Và nhận được tất cả các dịch vụ được gắn thẻ với nó? Hoặc thậm chí chuyển tất cả các thẻ được gắn thẻ với dịch vụ thẻ của tôi làm đối số cho một dịch vụ khác?

Trả lời

10

OK tôi thấy câu trả lời, về cơ bản thẻ được xử lý bởi các lớp mà thực hiện CompilerPassInterface đối tượng biên dịch qua thể được thêm vào trong file bunlde (ví dụ: Symfony\Bundle\FrameworkBundle\FrameworkBundle thấy phương pháp build)

CompilerPass có phương pháp process phù thủy nhận ContainerBuilder như là đối số.
ContainerBuilder có phương thức: findTaggedServiceIds, phù thủy có thể được sử dụng để nhận các ID dịch vụ được gắn thẻ và thực hiện bất kỳ điều gì bạn muốn với chúng.

Để chuyển kết quả cho một dịch vụ khác, bạn phải xác định đối số thu thập trống cho nó và sử dụng ContainerBuilder thay thế đối số này bằng ID dịch vụ tìm thấy.

ví dụ: Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass

+0

Cảm ơn bạn đã chia sẻ câu trả lời. Nhưng bạn cần cái này để làm gì? Tôi không bao giờ sử dụng điều này – HappyDeveloper

+0

Chỉ đơn giản là tò mò :) – canni

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