2013-05-15 27 views
17

Trong phần mở rộng bó Symfony2 my my services.yml đang được nạpNhận môi trường Symfony2 trong gói mở rộng

$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); 
$loader->load('services.yml'); 

Tuy nhiên tôi muốn tải các dịch vụ khác nhau cấu hình cho mỗi môi trường (ví dụ: một khác nhau cho các bài kiểm tra).

Hầu hết các ví dụ tôi đã tìm thấy để nhận môi trường hiện tại là để truy cập trong Bộ điều khiển (ví dụ: $this->get('kernel')->getEnvironment()), tuy nhiên không thể truy cập dựa trên Bộ điều khiển trong Tiện ích mở rộng.

Theo Twig extension - symfony2 environment môi trường có thể được xây dựng tiêm tuy nhiên tôi không chắc chắn cách mở rộng bó của tôi được đăng ký/instantiated bởi Symfony vì vậy không chắc chắn làm thế nào để có môi trường tiêm (tài liệu tham khảo duy nhất tôi tìm thấy thông qua grep là trong bộ nhớ cache các tệp không hữu ích).

Làm cách nào để chỉ định một tệp dịch vụ YAML khác nhau được tải cho mỗi tệp env trong cấu hình, hoặc ít nhất là tìm ra môi trường để tôi có thể mã lớp Lớp mở rộng của mình để tải tệp chính xác?

Trả lời

34

Thông thường, khi tải dịch vụ của bạn, nguyên mẫu phương pháp của bạn nên được

public function load(array $configs, ContainerBuilder $container). 

sau đó bạn có thể truy cập vào môi trường của bạn làm một

$env = $container->getParameter("kernel.environment") 

và sau đó kiểm tra $ env để xem trong đó loại môi trường bạn là.

Something như

if ("dev" == $env) { 
    $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
    $loader->load('devServices.yml'); 
} 
... 

Hope this helps!

+7

Nếu bạn có điều khiển của bạn như một dịch vụ mà bạn có thể tiêm '' '% kernel.environment%' '' –

+0

tiếp cận tốt hơn :) – Sharpy35

11
echo $this->container->get(‘kernel’)->getEnvironment(); 

trong phiên bản mới nhất (2.5)

+2

Hiya, điều này có thể cũng giải quyết vấn đề ... nhưng sẽ tốt nếu bạn có thể chỉnh sửa câu trả lời của mình và cung cấp thêm một chút giải thích về cách thức và lý do nó hoạt động :) Đừng quên - có rất nhiều người mới trên Stack overflow, và họ có thể học một hoặc hai điều từ chuyên môn của bạn - điều hiển nhiên đối với bạn có thể không như vậy đối với họ. –

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