2015-01-15 10 views
5

Tôi đang cố sử dụng ENVs để đặt tham số của mình trong Symfony2. Các giá trị vô hướng là đủ dễ dàng, nhưng tôi có các tham số là mảng mà tôi cần phải thiết lập bằng cách nào đó với ENV.ENV không vô hướng để sử dụng làm Thông số Symfony

Các tham số trong câu hỏi:

parameters: 
    redis.servers: 
    - { host: 127.0.0.1, port: 6379 } 
    - { host: other, port: 6379 } 
    # and so on 

Kicker ở đây là mảng các máy chủ có thể thay đổi tự động, vì vậy tôi không thể chỉ là giả định có 2.

Những gì tôi hy vọng sẽ làm (nhưng điều này chỉ cho tôi một chuỗi json):

SYMFONY__REDIS__SERVERS=[{"host":"127.0.0.1","port":"6379"}] 

Điều này có thể không? Bất kỳ công việc xung quanh nào khả thi? Có nhiều bó chúng tôi đang sử dụng chấp nhận tham số mảng/đối tượng, vì vậy tôi không thể cập nhật ở đó để xử lý thông số. Nó sẽ phải là cấp ứng dụng, nếu có.

Cảm ơn.

Trả lời

1

Tôi đã có thể giải quyết vấn đề này bằng cách cập nhật AppKernel để ghi đè phương thức getEnvParameters() của hạt nhân mẹ. Phương thức này chỉ chạy trên các tham số mà hạt nhân đã tìm thấy trong ENV (về mặt kỹ thuật từ $ _SERVER). Tôi thích nó bởi vì nó sẽ không chạy trên toàn bộ ngăn xếp tham số, cũng không phải toàn bộ mảng $ _SERVER.

protected function getEnvParameters() 
{ 
    $parameters = parent::getEnvParameters(); 
    foreach ($parameters as &$parameter) { 
     if (is_string($parameter)) { 
      $decoded = json_decode($parameter, true); 
      // we only care about arrays (or objects that get turned into arrays) 
      if (!json_last_error() && is_array($decoded)) { 
       $parameter = $decoded; 
      } 
     } 
    } 

    return $parameters; 
} 
Các vấn đề liên quan