Yiiディレクトリ構成

「Yiiディレクトリ構成」の編集履歴(バックアップ)一覧に戻る

Yiiディレクトリ構成 - (2013/10/10 (木) 17:59:03) のソース

[[トップページ]] > [[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 追記