Yiiディレクトリ構成

トップページ > Yii > ディレクトリ構成

サブディレクトリでの運用ではなく、ドメイン直下での運用(http://example.com/でスタートページにアクセス)
する場合は、

外部公開ディレクトリ webroot
内部非公開ディレクトリ protected

の2ディレクトリにまとめて、この2ディレクトリが同じ階層になる構成にしておくと便利。
webrootは、直接document rootとしてマウントしておく。
protectedは、document rootではないので、セキュリティ的に安心。

※webrootとprotectedが同階層にない構成にする場合、

webroot/index.php
webroot/index-test.php

の2ファイルからbasic.phpを読み込む部分だけ修正が必要。

通常運用の場合(テスト以外の箇所の設定)


具体的な設定は、まず

protected/config/main.php


function _joinpath($dir1, $dir2) {
	return realpath($dir1 . '/' . $dir2);
}

$homePath      = dirname(__FILE__) . '/../..';
$protectedPath = _joinpath($homePath, 'protected');
$runtimePath   = _joinpath($protectedPath, 'runtime');

return array(
	'basePath'=>$protectedPath,
	'runtimePath' => $runtimePath,
...

という形に。

次に、起動ファイルについて。共通する部分を

protected/config/basic.php

に外出しして、そこにyiiフレームワークのディレクトリを設定しておく。

<?php 
define('YII_FRAMEWORK' , '/home/myaccount/workspace/yii_proj/yii/framework');
?>

エントリースクリプト

webroot/index.php

では、このbasic.phpを読み込んで、以下のようにする

require_once(dirname(__FILE__).'/../protected/config/basic.php');
$yii=YII_FRAMEWORK . "/yii.php";
$config=dirname(__FILE__).'/../protected/config/main.php';
...

コマンドラインスクリプト

protected/yiic.php

も同様に、以下のようにする

require_once(dirname(__FILE__).'/config/basic.php');
$yiic=YII_FRAMEWORK . "/yiic.php";
$config=dirname(__FILE__).'/config/console.php';
,,,


テストを考えないのであれば、ここまででOK。
basic.phpは、この段階ではindex.phpからしか読み込まれないけど、設定ファイルは
config以下にまとめたほうがよいので、これで良しとする。

テスト用の設定


上記に加えて、さらに以下が必要。

機能テスト用のエントリースクリプト

webroot/index-test.php


require_once(dirname(__FILE__).'/../protected/config/basic.php');
$yii=YII_FRAMEWORK . "/yii.php";
$config=dirname(__FILE__).'/../protected/config/test.php';
...

これは、index.phpと共通のbasic.phpを読み込むことで設定しているため、環境が違う
場合でも、basic.phpを管理すればOK。

そのほか、単体テスト/機能テスト共通の、テスト用ブーストラップスクリプト

protected/tests/bootstrap.php

の設定ファイルも

require_once(dirname(__FILE__).'/../config/basic.php');
$yiit=YII_FRAMEWORK . "/yiit.php";
$config=dirname(__FILE__).'/../config/test.php';

これも、basic.phpを読み込んで設定するようにしてあるので、環境が違う場合でも、
basic.phpを管理すればOK。

機能テストで必要な、さらなる設定


ここまでは、環境ごとの違いは、すべてbasic.phpを管理することで対応できた。
しかしながら、機能テストについては、さらに環境依存で設定が必要なファイルが2つある。
(なお、蛇足だが機能テストの実行には、サーバー側にSelenium RC/Serverが必要)

protected/tests/WebTestCase.php

これは、サーバー上で機能テスト用のエントリースクリプトにhttpでアクセスする
ためのURLを記述しておく必要がある。環境依存なので注意。
webrootを直接document rootにしておいて、かつ、localhostでアクセス出来るのなら、
次のように記述する。

define('TEST_BASE_URL','http://localhost/index-test.php/');


また、機能テストで使用するブラウザは、

protected/tests/phpunit.xml

に記述してある。サーバ側にIEがインストールされていない場合は、IEの部分をコメント
アウトしておくこと。

	<selenium>
<!--  		<browser name="Internet Explorer" browser="*iexplore" /> --> 
		<browser name="Firefox" browser="*firefox" />
	</selenium>

2013/08/30
2013/10/10 追記
最終更新:2013年10月10日 17:59