Nasıl farklı bir ortam en Symfony'nin ProjectConfiguration.class.php içinde başvurabilirsiniz

2 Cevap php

Ben aynı makinede bir evreleme ve geliştirme ortamı var. Benim ortama bağlı ProjectConfiguration.class.php farklı bir memcached noktasını yapılandırmak istiyorum. Ben komut satırından çalıştırmak görevler için hesap değil çünkü ProjectConfiguration dosyasının içinde $ SERVER ['HTTP_HOST'] kullanmak için onun güvenli değil hayal.

Ne bu kod bit niyetinde ne başarmak için en iyi yol olacaktır:

public function configureDoctrine(Doctrine_Manager $manager) {

    if ($_SERVER['HTTP_HOST'] == 'dev.example.com') {
      $memcached_port = 11211;
    } else {
      $memcached_port = 11212;
    }

    $servers = array(
        'host' => '127.0.0.1',
        'port' => $memcached_port,
        'persistent' => true);
}

2 Cevap

Ben çevreyi algılamak ve burada başına, proje yapılandırma örneğine geçmek için web denetleyicisi http ana kullanın:

<?php

require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');

$env = ProjectConfiguration::getEnvironment();
if (!in_array($env, array('dev'))) throw new Exception('Not Allowed');

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', $env, true);
sfContext::createInstance($configuration)->dispatch();

Bu frontend_dev.php dan - bu yüzden de her yerde ama dev dev denetleyicisi erişemiyor sağlar.

Benim proje yapılandırma sınıfı çalışır başvurulan yöntem içerir:

public function getEnvironment() {
  if ($_SERVER ['HTTP_HOST'] == 'dev.example.com') {
    return 'dev';
  } else {
    return 'prod';
  }
}

Eğer haklı olarak dediği gibi, orada da vardır dikkate satırı görevlerini komut - ama neredeyse tüm symfony görevler alacak - env ​​= xxx argümanlar. Ben bunları kullanın. Onlar tüm varsayılan benim işin çoğunu nerede olduğu, yine dev, bu yüzden sesler onun gibi zorlu değil.

Sonra if (sfConfig::get('sf_environment') == 'dev') kullanmak istiyorum eğer senin yerine cmd hattı ve web hem çalışacak doğrudan HTTP_HOST, daha deyim.

Bunu gerçekleştirmek için 2 yolu vardır.

Başlamak için, index.php ayrı çevrenizi ayar olmalı. Biz genellikle eşya olarak ayarlayın, ve ne zaman dosyasında kontrol ve manuel dağıtım kolaylaştırmak amacıyla bizim dev sunucuları ve yerel makineleri üzerinde dev değiştirin. Ben de bu dosyayı koymak öneririz. Gitignore yüzden yanlışlıkla değişti geçmez.

  1. App.yml yapılandırma dosyasını kullanın. Lütfen app.yml config 'memcache_port' adlı bir anahtar kurmak ve her ortam için ayrı ayrı değerini ayarlayın. Yaml dosyası gibi bir şey olacaktır:

    prod:
      memcached_port: 11211
    
    dev:
      memcached_port: 11212
    

    Sonra söyleyebilirim kodunda bu değere erişmek için:

    $memcached_port = sfConfig::get('app_memcached_port');
    
  2. Elle Symfony bağlamda yoluyla çevre adı alın

    $env = sfContext::getInstance()->getConfiguration()->getEnvironment();
    if($env == 'dev') {
      $memcached_port = 11211;
    } else if($env == 'prod') {
      $memcached_port = 11212;
    }
    

Ben şahsen seçeneği 1 tercih, ama bu nasıl işlemek istediğinizi tamamen size kalmış.

Not: Ben çevreye bakın, ben index.php dosyasında tanımlanan symfony çevreye bahsediyorum.

Umarım bu yardımcı olur.