2012-08-31 39 views
6

Tôi muốn biết nếu có cách nào để tìm các dịch vụ được gắn thẻ trong Command.Symfony2 - Tìm các dịch vụ được gắn thẻ theo lệnh

Tôi có Lệnh mở rộng ContainerAwareCommand, tôi có thể truy cập vào vùng chứa nhưng tôi muốn nhận tất cả các dịch vụ được gắn thẻ bởi một thẻ cụ thể. Ví dụ: tôi muốn có một cái gì đó như thế:

$this->getContainer()->findTaggedServiceIds('smtp.transport') 

Trả lời

10

Dịch vụ được gắn thẻ chỉ có sẵn tại thời điểm xây dựng của thùng chứa phụ thuộc, không phải lúc chạy. Vì vậy, để có được tất cả các dịch vụ với một thẻ nhất định, bạn sẽ cần phải xây dựng một trình biên dịch để lưu danh sách các dịch vụ này mà sau đó bạn có thể sử dụng sau này trong lệnh của mình. Đây là tất cả được mô tả trong tài liệu này:

http://symfony.com/doc/current/components/dependency_injection/tags.html

+0

Vâng, tôi đã có một đường chuyền biên dịch mà tôi thêm vào thông qua $ container-> addCompilerPass() trong Bundle tôi. Vấn đề là tôi không thể tìm ra cách để lấy ContainerBuilder trong Command để tôi có thể gọi addCompilerPass(). Bạn còn ý kiến ​​nào không? – passkey1510

+0

Ah Ok, tôi hiểu rồi. Tôi có nhiều ứng dụng có nhiều AppKernel, chỉ cần gọi đúng ứng dụng tải gói. Cảm ơn nhiều. – passkey1510

+0

@ passkey1510 Bạn có thể chấp nhận câu trả lời này sau đó? :-) –

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