Symfonyで環境の違いを考慮した設定方法
symfonyのインストールディレクトリが違う
三項演算子なりswich文なりで、パスを動的に書き換える。
ヒットする可能性が高い順に調べることで、比較回数を減らすよう考慮すべし。
web/index.php
<?php $path = is_file('/usr/local/share/pear/symfony/autoload/sfCoreAutoload.class.php') ? '/usr/local/share/pear/symfony/autoload/sfCoreAutoload.class.php' : '/usr/share/pear/symfony/autoload/sfCoreAutoload.class.php'; require_once $path; sfCoreAutoload::register(); class ProjectConfiguration extends sfProjectConfiguration { public function setup() { // for compatibility / remove and enable only the plugins you want $this->enableAllPluginsExcept(array('sfPropelPlugin', 'sfCompat10Plugin')); } }
cookieのパス
factories.ymlで設定可能ですが、factries.yml読み込み時にはRequestオブジェクトがまだ作成されていないので正規表現で動的に作成しました。正規表現は sfWebRequest.class.php の getRelativeUrlRoot メソッドから拝借。
apps/frontend/config/factories.yml
all: storage: class: sfSessionStorage param: session_name: symfony session_cookie_path: <?php echo preg_replace('#/[^/]+\.php5?$#', '', $_SERVER['SCRIPT_NAME']).'/' ?>
その他
databases.yml や .htaccess は変更なしで使えるようテスト環境、本番環境で揃えた方が楽。無理な場合は、バージョン管理やrsync対象から外す。その代わり、databases.yml.sample .htaccess.sample というファイルを用意しておき、リネーム(.sample削る)して環境に応じて編集するようにすれば1から記述する手間が多少減る。
.gitignore
Git用にこんな設定にしてます。
*.swp cache/ data/ log/ config/databases.yml web/.htaccess
init.sh
.gitignoreの対になるシェルスクリプトとしてこんなの作りました。
#!/bin/sh mkdir -p cache data/fixtures data/sql log chmod 777 cache log cp config/databases.yml.sample config/databases.yml cp web/.htaccess.sample web/.htaccess
git clone してきた後に
$ ./init.sh
することで、必要なディレクトリを生成します。