symfony 1.2以降でアプリケーション名と環境名などを取得する方法

1.0の場合はSF_APPやSF_ENVといった定数がありましたが、1.2以降では取得方法が変わっています。

<?php
$context = sfContext::getInstance();
$configuration = $context->getConfiguration();

if ($configuration instanceof sfApplicationConfiguration) {
  // アプリケーション名
  $app = $configuration->getApplication();

  // 環境名
  $env = $configuration->getEnvironment();

  // デバッグモードかどうか
  $isDebug = $configuration->isDebug();
}

アクションなどの場合は$this->getContext()でコンテキストオブジェクトが取れるので、

<?php

public function executeIndex(sfWebRequest $request)
{
  $app = $this->getContext()->getConfiguration()->getApplication();
}

このようにして取得することが可能です。ただしタスクの場合、アプリケーションの指定をしない限り、コンフィギュレーションオブジェクトがsfApplicationConfigurationのインスタンスではなくsfProjectConfigurationのインスタンスになってしまいます。

その場合、個別のアプリケーションではなくプロジェクト全体を指すコンフィギュレーションになるので、当然アプリケーションや環境の取得はできません。

定数はほとんど定義しないようになったのですが、コアに関わるような定数が1つだけ定義されています。それはSYMFONY_VERSIONです。sfCoreAutoloadクラスファイルの先頭で定義されています。symfonyのバージョンをチェックしたい場合はこの定数を取得します。

sfProjectConfigurationクラスやsfApplicationConfigurationクラスはsfConfigに値を設定したりアプリケーションに関連するディレクトリの情報などを取得できるなど、様々な設定事項をここから取得可能です。困ったときはこのクラスを見てみるといいかもしれません。