• R/O
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

PHPのフレームワークです。オートローディング、ルーティング、ORマッパ、フォームバリデータ、その他ユーティリティがセットになっています。


Commit MetaInfo

修订版162 (tree)
时间2022-03-25 13:31:15
作者tantancode

Log Message

settings のキーを統廃合

更改概述

差异

--- deploy/install.sh (revision 161)
+++ deploy/install.sh (revision 162)
@@ -124,7 +124,7 @@
124124 fulluser=$(sed -r "s/([^']+)@([^']+)/'\1'@'\2'/" <<< "$fulluser")
125125
126126 # 本番環境では行わない。
127- envtype=$(php -r 'echo (include "resources/environment.php")["environment"]["environment_type"];')
127+ envtype=$(php -r 'echo (include "resources/environment.php")["application"]["environment_type"];')
128128 if test "$envtype" != "prod"; then
129129
130130 # DBが既存の場合は...
--- lib/AppMojo.php (revision 161)
+++ lib/AppMojo.php (revision 162)
@@ -78,19 +78,6 @@
7878
7979 //-----------------------------------------------------------------------------------------------------
8080 /**
81- * 引数に指定された名前の環境変数の値を返す。
82- * Mojo::setting() の第一引数を "environment" で固定したショートハンド。
83- *
84- * param 環境変数の名前。settings.php の 'environment' 以下のサブキー。
85- * return 該当の値。見付からない場合は null だが E_NOTICE が発生する。
86- */
87- public static function getEnvironment($name) {
88-
89- return static::setting('environment', $name);
90- }
91-
92- //-----------------------------------------------------------------------------------------------------
93- /**
9481 * アプリのルートURLを返す。
9582 *
9683 * param フロントコントローラーの名前。省略時は現在のコントローラー名が使われる。
@@ -224,7 +211,7 @@
224211 $log = AppLog::exception($e);
225212
226213 // 本番環境なら簡易なメッセージとエラーログを引くためのコードを表示する。
227- if(static::getEnvironment('environment_type') == 'prod') {
214+ if(static::setting('application', 'environment_type') == 'prod') {
228215
229216 echo "申しわけありません。エラーが発生しました。\n"
230217 . "お問い合わせコード: {$log['code']}\n";
--- lib/UrlUtil.php (revision 161)
+++ lib/UrlUtil.php (revision 162)
@@ -30,7 +30,7 @@
3030
3131 // ドメインがなかったら補う。
3232 if( !@$match[2] )
33- $match[2] = @$servs[2] ?: ('//' . AppMojo::getEnvironment('http_host'));
33+ $match[2] = @$servs[2] ?: ('//' . AppMojo::setting('application', 'http_host'));
3434
3535 // パスが "/" で始まってなかったら補う。
3636 if( @$match[3][0] != '/' )
--- lib/ViewUtil.php (revision 161)
+++ lib/ViewUtil.php (revision 162)
@@ -141,7 +141,7 @@
141141 if(!$path) return $path;
142142
143143 // 静的ファイルホスティング設定も加味して絶対URLにする。
144- return AppMojo::getEnvironment('asset_host') . '/' . $path . self::versionStamp($path);
144+ return AppMojo::setting('application', 'asset_host') . '/' . $path . self::versionStamp($path);
145145 }
146146
147147 /**
--- lib/filters/AccessTraceFilter.php (revision 161)
+++ lib/filters/AccessTraceFilter.php (revision 162)
@@ -40,7 +40,7 @@
4040 $userId = Mojo::setting('process', 'mojo.session')::getSession()['user_id'];
4141
4242 // file.target='all' は本番では無効。
43- if($this->params['file.target'] == 'all' && AppMojo::getEnvironment('environment_type') == 'prod')
43+ if($this->params['file.target'] == 'all' && AppMojo::setting('application', 'environment_type') == 'prod')
4444 $this->params['file.target'] == 'none';
4545
4646 // file.target='none' なら何もしない。
--- lib/filters/ApiBehaviorFilter.php (revision 161)
+++ lib/filters/ApiBehaviorFilter.php (revision 162)
@@ -35,7 +35,7 @@
3535 header('Cache-Control: no-cache');
3636
3737 // 本番環境ではJSONエンコードのオプションを調整する。
38- if(AppMojo::getEnvironment('environment_type') == 'prod' && $action->renderer instanceof JsonRenderer)
38+ if(AppMojo::setting('application', 'environment_type') == 'prod' && $action->renderer instanceof JsonRenderer)
3939 $action->renderer->encodeOptions &= ~JSON_PRETTY_PRINT;
4040
4141 // メンテナンス時、他アクションへ飛ばすのではなくここで処理するようにする。
@@ -91,7 +91,7 @@
9191 }
9292
9393 // 本番環境以外ではエラートレースもセットする。
94- if(AppMojo::getEnvironment('environment_type') != 'prod')
94+ if(AppMojo::setting('application', 'environment_type') != 'prod')
9595 $response['error_trace'] = Log::stringifyException($e);
9696
9797 // 出力。
--- lib/filters/BasicAuthenticationFilter.php (revision 161)
+++ lib/filters/BasicAuthenticationFilter.php (revision 162)
@@ -38,7 +38,7 @@
3838 protected function preExecute($action) {
3939
4040 // environmentsで指定された環境以外では認証しない。
41- if( $this->params['environments'] && !in_array(AppMojo::getEnvironment('environment_type'), (array)$this->params['environments']) )
41+ if( $this->params['environments'] && !in_array(AppMojo::setting('application', 'environment_type'), (array)$this->params['environments']) )
4242 return;
4343
4444 // パラメータ redirect が設定されている場合は...
--- lib/filters/MaintenanceShutterFilter.php (revision 161)
+++ lib/filters/MaintenanceShutterFilter.php (revision 162)
@@ -1,7 +1,7 @@
11 <?php
22
33 /**
4- * settings.php で environment - maintenance_mode が true にされていたら処理を中断するフィルタ。
4+ * settings.php で application - maintenance_mode が true にされていたら処理を中断するフィルタ。
55 * メンテナンスページの表示はフィルタパラメータで指定されたアクションを用いるが、フィルタパラメータが関数としてコール可能なら、代わりにコールされる。
66 */
77 class MaintenanceShutterFilter extends OnceFilter {
@@ -13,7 +13,7 @@
1313 protected function preExecuteOnce($action) {
1414
1515 // メンテナンスモード中なら...
16- if( @Mojo::getEnvironment('maintenance_mode') ) {
16+ if( @Mojo::setting('application', 'maintenance_mode') ) {
1717
1818 // フィルタパラメータが関数としてコール可能ならコール、不可ならソーリーページへリダイレクトする。
1919 if( is_callable($this->params[0]) )
--- lib/letter/MailLetter.php (revision 161)
+++ lib/letter/MailLetter.php (revision 162)
@@ -76,7 +76,7 @@
7676
7777 // メールヘッダを作成。
7878 $headers = array(
79- "From: " . AppMojo::setting('application', 'from_address'),
79+ "From: " . AppMojo::setting('smtp', 'fromaddr'),
8080 "To: " . $to,
8181 "Subject: " . sprintf('=?UTF-8?B?%s?=', base64_encode($title)),
8282 "MIME-Version: 1.0",
@@ -190,10 +190,10 @@
190190 $log = '';
191191
192192 // SMTP情報を取得。
193- $server = AppMojo::setting('environment', 'smtp_server');
194- $userid = AppMojo::setting('environment', 'smtp_userid');
195- $password = AppMojo::setting('environment', 'smtp_password');
196- $from = AppMojo::setting('application', 'from_address');
193+ $server = AppMojo::setting('smtp', 'server');
194+ $userid = AppMojo::setting('smtp', 'userid');
195+ $password = AppMojo::setting('smtp', 'password');
196+ $from = AppMojo::setting('smtp', 'fromaddr');
197197
198198 // SMTPサーバが "file" とされているならメールデータをファイルとして出力する。
199199 if($server == 'file') {
--- lib/letter/SmsLetter.php (revision 161)
+++ lib/letter/SmsLetter.php (revision 162)
@@ -45,10 +45,10 @@
4545 // https://www.twilio.com/docs/sms/api/message-resource#create-a-message-resource
4646
4747 // SMS送信に必要な情報を取得。
48- $account = AppMojo::setting('environment', 'sms_account');
49- $id = AppMojo::setting('environment', 'sms_id');
50- $secret = AppMojo::setting('environment', 'sms_secret');
51- $from = AppMojo::setting('application', 'sms_fromno');
48+ $account = AppMojo::setting('sms', 'account');
49+ $sid = AppMojo::setting('sms', 'sid') ?: $account;
50+ $secret = AppMojo::setting('sms', 'secret');
51+ $from = AppMojo::setting('sms', 'fromno');
5252
5353 // Twilioアカウントが "file" とされているなら送信文をファイルとして出力する。
5454 if($account == 'file')
@@ -56,9 +56,9 @@
5656
5757 // APIのURLを取得。
5858 $account = urlencode($account);
59- $id = urlencode($id);
59+ $sid = urlencode($sid);
6060 $secret = urlencode($secret);
61- $endpoint = "https://{$id}:{$secret}@api.twilio.com/2010-04-01/Accounts/{$account}/Messages.json";
61+ $endpoint = "https://{$sid}:{$secret}@api.twilio.com/2010-04-01/Accounts/{$account}/Messages.json";
6262
6363 // 送信。
6464 try {
--- lib/tables/AccessLog.php (revision 161)
+++ lib/tables/AccessLog.php (revision 162)
@@ -136,7 +136,7 @@
136136 public static function isHearTarget($userId) {
137137
138138 // 本番でないなら全部ログしてみよう。
139- if(AppMojo::getEnvironment('environment_type') != 'prod')
139+ if(AppMojo::setting('application', 'environment_type') != 'prod')
140140 return true;
141141
142142 // POSTリクエストはすべてログする。
--- lib/tables/database/SqlExecutor.php (revision 161)
+++ lib/tables/database/SqlExecutor.php (revision 162)
@@ -265,7 +265,7 @@
265265 $time = Profiler::finish('sql');
266266
267267 // デバッグ処理が必要か判定して、必要なら変数 $format にその形式を取得する。
268- $mode = defined('SQL_DEBUG') ? constant('SQL_DEBUG') : Mojo::setting('environment', 'sql_debug');
268+ $mode = defined('SQL_DEBUG') ? constant('SQL_DEBUG') : Mojo::setting('application', 'sql_debug');
269269 if($mode) {
270270
271271 // true で指定されているのは "all.html" と解釈する。
--- mojo.php (revision 161)
+++ mojo.php (revision 162)
@@ -1,10 +1,13 @@
11 <?php
22
3-// ディレクトリ&クラス設定をロード。
4-$settings = include(__DIR__ . '/resources/settings.php');
3+(function(){
54
6-// Mojoクラスをロード。
7-require_once(APP_DIR . '/' . $settings['directories']['mojo.mojo'] . '/Mojo.php');
5+ // ディレクトリ&クラス設定をロード。
6+ $settings = include(__DIR__ . '/resources/settings.php');
87
9-// 起動。
10-Mojo::launch($settings);
8+ // Mojoクラスをロード。
9+ require_once(APP_DIR . '/' . $settings['directories']['mojo.mojo'] . '/Mojo.php');
10+
11+ // 起動。
12+ Mojo::launch($settings);
13+})();
--- resources/environment.sample.php (revision 161)
+++ resources/environment.sample.php (revision 162)
@@ -6,34 +6,22 @@
66 return array(
77
88 // 環境の設定。
9- 'environment' => array(
10- 'environment_type' => 'dev', // "dev":開発環境 "stage":ステージング環境 "prod":本番 のいずれか。
11- 'sql_debug' => '', // SQLデバッグモード。以下のいずれか。定数 SQL_DEBUG で定義することも出来る。その場合はそちらのほうが優先。
12- // all.html 全て出力。HTMLフォーマット。
13- // write.html 更新系のみ出力。HTMLフォーマット。
14- // all.text 全て出力。textフォーマット。
15- // write.text 更新系のみ出力。textフォーマット。
16- // all.log 全てログ。textフォーマット。
17- // write.log 更新系のみログ。textフォーマット。
18- 'maintenance_mode' => false, // 管理機能以外のアクセスを遮断したい場合はtrueにする。
9+ 'application' => array(
10+ 'environment_type' => 'dev', // "dev":開発環境 "stage":ステージング環境 "prod":本番 のいずれか。
11+ 'sql_debug' => '', // SQLデバッグモード。以下のいずれか。定数 SQL_DEBUG で定義することも出来る。その場合はそちらのほうが優先。
12+ // all.html 全て出力。HTMLフォーマット。
13+ // write.html 更新系のみ出力。HTMLフォーマット。
14+ // all.text 全て出力。textフォーマット。
15+ // write.text 更新系のみ出力。textフォーマット。
16+ // all.log 全てログ。textフォーマット。
17+ // write.log 更新系のみログ。textフォーマット。
18+ 'maintenance_mode' => false, // 管理機能以外のアクセスを遮断したい場合はtrueにする。
1919
2020 // ホスト情報。
21- 'http_host' => 'localhost', // このサーバのHTTPドメイン。デフォルトでないならポートも含む。例) example.com:8080
21+ 'http_host' => 'localhost', // このサーバのHTTPドメイン。ポートも含む。例) example.com:8080
2222 # 'http_host' => @$_SERVER['HTTP_HOST'] ?? basename(APP_DIR), // ディレクトリ名から取得するならこれ。
23- 'asset_host' => '', // 静的ファイルのホスティングURL。"//example.com/dir1" のように指定する。末尾に "/" は付けないようにする。
24- // 自ホストを使う場合は空文字。サービスが https に対応しているなら、このドメインも対応している必要がある。
25-
26- // メール関連。
27- # 'smtp_server' => 'tcp://example.com:587', // SMTPサーバー
28- # 'smtp_server' => 'tls://example.com:465', // SMTPサーバー(SSLの場合)
29- 'smtp_server' => 'file', // ログファイルに出力する場合
30- 'smtp_userid' => 'your_username', // SMTPユーザ名
31- 'smtp_password' => 'your_password', // SMTPパスワード
32-
33- // SMS関連。
34- 'sms_account' => 'twilio_account_sid', // TwilioアカウントSID。"file" とした場合はログディレクトリに出力する。
35- 'sms_id' => 'twilio_account_sid_or_api_key_sid', // TwilioアカウントSID。API Credentials を使う場合はそのSID
36- 'sms_secret' => 'twilio_auth_token_or_api_key_secret', // Twilio Auth Token。 API Credentials を使う場合はそのシークレット
23+ 'asset_host' => '', // 静的ファイルのホスティングURL。"//example.com/dir1" のように指定する。末尾に "/" は付けないようにする。
24+ // 自ホストを使う場合は空文字。サービスが https に対応しているなら、このドメインも対応している必要がある。
3725 ),
3826
3927 // データベース定義。キーをデータベース識別名とし、値にその接続情報を格納する。
--- resources/settings.php (revision 161)
+++ resources/settings.php (revision 162)
@@ -1,6 +1,6 @@
11 <?php
22 /**
3- * アプリケーションの設定を返すファイル。
3+ * アプリケーションの設定を定義するファイル。
44 */
55
66 // プロジェクトディレクトリの物理パス。
@@ -10,115 +10,133 @@
1010 // "/this/is/example" のように記述する。ルートディレクトリの場合は空文字とする。
1111 define('APP_WEB', '');
1212
13-// ここで記述した連想配列を返す。ここで設定した値は Mojo::setting() で取得することが出来る。
13+// アプリの設定。ここで設定した値は Mojo::setting() で取得することが出来る。
1414 // "mojo." の接頭辞が付いているキーはMojoの内部で必要になるが、その他に追加したい値があれば好きに追加することが出来る。
15-return array_replace_recursive(
15+// environment.php で記述された値で上書きマージされるので、環境によって変わる値はそちらに記述。
16+$settings = array(
1617
17- array(
18+ // ディレクトリの物理パス。相対パスは APP_DIR が基準となる。
19+ 'directories' => array(
20+ 'mojo.mojo' => 'mojo', // Mojoのクラスファイルがあるディレクトリ。
21+ 'mojo.resources' => 'resources', // リソース類を格納するディレクトリ。
22+ 'mojo.libs' => 'lib', // "libs" ディレクトリ。サブディレクトリを含め、このディレクトリより下のファイルはオートロードの対象になる。
23+ 'mojo.sites' => 'sites', // サイト・アクションファイルを格納しているディレクトリ。
24+ 'mojo.var' => 'var', // サーバ処理で生成されるファイルの格納ディレクトリ。
25+ 'smarty.cache' => 'var/smarty.cache',
26+ 'smarty.compile' => 'var/smarty.compile',
27+ 'htdocs' => 'htdocs', // HTTPドキュメントを格納しているディレクトリ。
28+ 'logs.root' => 'var/logs', // ログを格納するルートディレクトリ。
29+ 'logs.current' => 'var/logs/'.date('Ym'), // 現在日時におけるログ格納ディレクトリ。
30+ // AppMojo::setting() の働きで、コマンドラインで実行している場合は末尾にユーザ名が付く。
31+ ),
1832
19- // ディレクトリの物理パス。相対パスは APP_DIR が基準となる。
20- 'directories' => array(
21- 'mojo.mojo' => 'mojo', // Mojoのクラスファイルがあるディレクトリ。
22- 'mojo.resources' => 'resources', // リソース類を格納するディレクトリ。
23- 'mojo.libs' => 'lib', // "libs" ディレクトリ。サブディレクトリを含め、このディレクトリより下のファイルはオートロードの対象になる。
24- 'mojo.sites' => 'sites', // サイト・アクションファイルを格納しているディレクトリ。
25- 'mojo.var' => 'var', // サーバ処理で生成されるファイルの格納ディレクトリ。
26- 'smarty.cache' => 'var/smarty.cache',
27- 'smarty.compile' => 'var/smarty.compile',
28- 'htdocs' => 'htdocs', // HTTPドキュメントを格納しているディレクトリ。
29- 'logs.root' => 'var/logs', // ログを格納するルートディレクトリ。
30- 'logs.current' => 'var/logs/'.date('Ym'), // 現在日時におけるログ格納ディレクトリ。
31- // AppMojo::setting() の働きで、コマンドラインで実行している場合は末尾にユーザ名が付く。
32- ),
33+ // ルーティングに関する設定。
34+ 'routing' => array(
35+ 'mojo.default_site' => 'public', // URLでサイトが省略された場合のデフォルト。
36+ 'mojo.default_site.cli' => 'command', // コマンドラインで実行された場合のデフォルトサイト。
37+ 'mojo.default_action' => 'index', // URLでアクションが省略された場合のデフォルト。
38+ 'mojo.default_front' => 'index.php', // 省略可能なフロントコントローラー。URL生成時に参照される。
39+ 'mojo.notfound_action' => 'notfound', // 該当のアクションが見つからない場合のアクション。
40+ 'mojo.error_action' => 'sorry.error', // エラーが発生した場合のエラー表示アクション。AppMojo クラスで処理されている。
3341
34- // ルーティングに関する設定。
35- 'routing' => array(
36- 'mojo.default_site' => 'public', // URLでサイトが省略された場合のデフォルト。
37- 'mojo.default_site.cli' => 'command', // コマンドラインで実行された場合のデフォルトサイト。
38- 'mojo.default_action' => 'index', // URLでアクションが省略された場合のデフォルト。
39- 'mojo.default_front' => 'index.php', // 省略可能なフロントコントローラー。URL生成時に参照される。
40- 'mojo.notfound_action' => 'notfound', // 該当のアクションが見つからない場合のアクション。
41- 'mojo.error_action' => 'sorry.error', // エラーが発生した場合のエラー表示アクション。AppMojo クラスで処理されている。
42+ // ここの設定で、リクエストされているパスを先頭一致で検査するURLリライトのような挙動を設定できる。
43+ //
44+ // 例)
45+ // // "gadget.php" を "index.php/public/gadget" として処理したい場合
46+ // 'gadget.php' => 'index.php/public/gadget'
47+ //
48+ // // "xxxxx.php/gadget" を "xxxxx.php/task/gadget" と解釈したい場合
49+ // '*/gadget' => '*/task/gadget'
50+ //
51+ // 説明)
52+ // "*" はキーにおいてはワイルドカード、値においては「その部分を置き換えない」という意味になる。
53+ // "/" で区切られた区画ごとに処理する。
54+ // "foo/bar/index.php/..." のように、サブディレクトリにフロントコントローラーが置かれている場合でも
55+ // フロントコントローラー以降のパスのみが検査対象となる。
56+ // キーの定義順に検査され、一度マッチしたら以降のキーは検査されない。
57+ ),
4258
43- // ここの設定で、リクエストされているパスを先頭一致で検査するURLリライトのような挙動を設定できる。
44- //
45- // 例)
46- // // "gadget.php" を "index.php/public/gadget" として処理したい場合
47- // 'gadget.php' => 'index.php/public/gadget'
48- //
49- // // "xxxxx.php/gadget" を "xxxxx.php/task/gadget" と解釈したい場合
50- // '*/gadget' => '*/task/gadget'
51- //
52- // 説明)
53- // "*" はキーにおいてはワイルドカード、値においては「その部分を置き換えない」という意味になる。
54- // "/" で区切られた区画ごとに処理する。
55- // "foo/bar/index.php/..." のように、サブディレクトリにフロントコントローラーが置かれている場合でも
56- // フロントコントローラー以降のパスのみが検査対象となる。
57- // キーの定義順に検査され、一度マッチしたら以降のキーは検査されない。
58- ),
59+ // クラスオートローディングの設定。クラス名をキー、そのクラスが定義されているファイルの APP_DIR からの相対パスを値とする。
60+ // ここに設定していなくても以下の条件をすべて満たしていればオートロードされる。
61+ // ・ファイルが libs 以下にあること。(サブディレクトリも含む)
62+ // ・"[クラス名].php" というファイル名であること。たとえば、Foo クラスであれば Foo.php であること。
63+ 'autoload' => array(
64+ ),
5965
60- // クラスオートローディングの設定。クラス名をキー、そのクラスが定義されているファイルの APP_DIR からの相対パスを値とする。
61- // ここに設定していなくても以下の条件をすべて満たしていればオートロードされる。
62- // ・ファイルが libs 以下にあること。(サブディレクトリも含む)
63- // ・"[クラス名].php" というファイル名であること。たとえば、Foo クラスであれば Foo.php であること。
64- 'autoload' => array(
65- ),
66+ // 標準処理についての設定。
67+ 'process' => array(
6668
67- // 標準処理についての設定。
68- 'process' => array(
69+ 'mojo.file_group' => 'nginx', // ログファイル等を作成するときのオーナーグループ。
6970
70- 'mojo.file_group' => 'nginx', // ログファイル等を作成するときのオーナーグループ。
71+ // 処理担当クラスの名前。Mojoの処理をオーバーライドしたいときはここのクラス名を変更することが出来る。
72+ 'mojo.engine' => 'AppMojo', // Mojo クラスを通じて呼び出される処理の実装を担当しているクラス。
73+ 'mojo.renderer' => 'SmartyRenderer', // デフォルトで使用されるレンダラ。
74+ 'mojo.session' => 'PhpSession', // セッションの管理に使用するクラス。
75+ 'form.top' => 'MojoForm', // MojoForm 群における管制クラス
76+ 'form.container' => 'FormContainer', // 同じくコンテナクラス
77+ 'form.item' => 'FormItem', // 同じく個別項目クラス
7178
72- // 処理担当クラスの名前。Mojoの処理をオーバーライドしたいときはここのクラス名を変更することが出来る。
73- 'mojo.engine' => 'AppMojo', // Mojo クラスを通じて呼び出される処理の実装を担当しているクラス。
74- 'mojo.renderer' => 'SmartyRenderer', // デフォルトで使用されるレンダラ。
75- 'mojo.session' => 'PhpSession', // セッションの管理に使用するクラス。
76- 'form.top' => 'MojoForm', // MojoForm 群における管制クラス
77- 'form.container' => 'FormContainer', // 同じくコンテナクラス
78- 'form.item' => 'FormItem', // 同じく個別項目クラス
79+ // すべてのアクションに適用するフィルタ。
80+ // フィルタのクラス名をキー、パラメータを値とする配列だが、パラメータがない場合は値にクラス名を記述することができる。
81+ //
82+ // 例)
83+ // // パラメータのない FooFilter と、パラメータ array('a'=>5) で初期化した BarFilter を適用する。
84+ // 'mojo.standard_filters' => array('FooFilter', 'BarFilter'=>array('a'=>5));
85+ //
86+ // // 同じクラスのフィルタを複数設定したい場合は次のようにする。"." のあとは何でも良い。
87+ // 'mojo.standard_filters' => array('BarFilter.1'=>array('a'=>1), 'BarFilter.2'=>array('a'=>1));
88+ //
89+ 'mojo.standard_filters' => array('LogSlowFilter'=>1000, 'PostValidationFilter'),
90+ ),
7991
80- // すべてのアクションに適用するフィルタ。
81- // フィルタのクラス名をキー、パラメータを値とする配列だが、パラメータがない場合は値にクラス名を記述することができる。
82- //
83- // 例)
84- // // パラメータのない FooFilter と、パラメータ array('a'=>5) で初期化した BarFilter を適用する。
85- // 'mojo.standard_filters' => array('FooFilter', 'BarFilter'=>array('a'=>5));
86- //
87- // // 同じクラスのフィルタを複数設定したい場合は次のようにする。"." のあとは何でも良い。
88- // 'mojo.standard_filters' => array('BarFilter.1'=>array('a'=>1), 'BarFilter.2'=>array('a'=>1));
89- //
90- 'mojo.standard_filters' => array('LogSlowFilter'=>1000, 'PostValidationFilter'),
91- ),
92+ // メール関連。
93+ 'smtp' => array(
94+ # 'server' => 'tcp://example.com:587', // SMTPサーバー
95+ # 'server' => 'tls://example.com:465', // SMTPサーバー(SSLの場合)
96+ 'server' => 'file', // ログファイルに出力する場合
97+ 'userid' => 'your_username', // SMTPユーザ名
98+ 'password' => 'your_password', // SMTPパスワード
99+ 'fromaddr' => 'test@example.com', // システムから送るメールのFromアドレス
100+ ),
92101
93- // これらは実行時に設定される。ここには説明のためにキーのみが記述されている。
94- 'runtime' => array(
95- 'mojo.requested_site' => '', // リクエストされているサイト名。
96- 'mojo.requested_action' => '', // リクエストされているグループ・モーション名。
97- 'mojo.requested_name' => '', // 上記二つを "/" で連結したもの。
98- 'mojo.front_dir' => '', // REQUEST_URI から PATH_INFO を除き、さらに実行ファイル部分を除いたもの。
99- // たとえば、/some/path/index.php/abc/def であれば /some/path
100- 'mojo.front_file' => '', // 実行ファイルの名前。上記の例なら index.php
101- 'mojo.path_info' => '', // PATH_INFO にルーティング設定を反映したもの。
102- 'real_get' => null, // $_GET のコピー。処理の途中で $_GET を変更しているような場合に、変更前の値にアクセスしたいときに参照できる。
103- 'real_post' => null, // 同、$_POST。
104- ),
102+ // SMS関連。
103+ 'sms' => array(
104+ 'account' => 'twilio_account_sid', // TwilioアカウントSID。"file" とした場合はログディレクトリに出力する。
105+ 'sid' => 'api_key_sid', // API Credentials を使う場合はそのSID。アカウントSIDをそのまま使うなら空文字。
106+ 'secret' => 'twilio_auth_token_or_api_key_secret', // Twilio Auth Token か、API Credentials を使う場合はそのシークレット
107+ 'fromno' => '+00000000000', // From番号。Twilioで取得した番号である必要がある。
108+ ),
105109
106- // その他設定。
107- 'application' => array(
108- 'app_name' => 'テストアプリ', // アプリ名
109- 'from_address' => 'test@example.com', // システムから送るメールのFromアドレス
110- 'sms_fromno' => '+00000000000', // システムから送るSMSのFrom番号。Twilioで取得した番号である必要がある。
111- 'versatile_secret' => 'fooisbar.fooisbar.fooisbar.foois', // 汎用的に使用するハッシュシークレット
112- 'password_pepper' => 'barisfoo.barisfoo.barisfoo.baris', // ユーザのパスワードハッシュに使用するペッパー。
113- // 変更すると全ユーザのパスワードハッシュが変わるので余程のことがないと変更は出来ない。
114- ),
110+ // その他設定。
111+ 'application' => array(
112+ 'app_name' => 'テストアプリ', // アプリ名
113+ 'versatile_secret' => 'fooisbar.fooisbar.fooisbar.foois', // 汎用的に使用するハッシュシークレット
114+ 'password_pepper' => 'barisfoo.barisfoo.barisfoo.baris', // ユーザのパスワードハッシュに使用するペッパー。
115+ // 変更すると全ユーザのパスワードハッシュが変わるので余程のことがないと変更は出来ない。
115116
116- // 環境の設定。基本的に environment.php のほうで設定するのだが、どの環境でもまず同じものをこちらで定義している。
117- // 同名のキーが environment.php にもある場合はそちらが優先。
118- 'environment' => array(
119- ),
117+ 'environment_type' => '', // この辺は environment.php のほうで設定するので説明もそちらに。
118+ 'sql_debug' => '', //
119+ 'maintenance_mode' => false, //
120+ 'http_host' => '', //
121+ 'asset_host' => '', //
120122 ),
121123
122- // environment.php で値を追加・上書きできるようにする。
123- include __DIR__.'/environment.php'
124+ 'database.databases' => array(), //
125+ 'database.tables' => array(), //
126+
127+ // これらは実行時に設定される。ここには説明のためにキーのみが記述されている。
128+ 'runtime' => array(
129+ 'mojo.requested_site' => '', // リクエストされているサイト名。
130+ 'mojo.requested_action' => '', // リクエストされているグループ・モーション名。
131+ 'mojo.requested_name' => '', // 上記二つを "/" で連結したもの。
132+ 'mojo.front_dir' => '', // REQUEST_URI から PATH_INFO を除き、さらに実行ファイル部分を除いたもの。
133+ // たとえば、/some/path/index.php/abc/def であれば /some/path
134+ 'mojo.front_file' => '', // 実行ファイルの名前。上記の例なら index.php
135+ 'mojo.path_info' => '', // PATH_INFO にルーティング設定を反映したもの。
136+ 'real_get' => null, // $_GET のコピー。処理の途中で $_GET を変更しているような場合に、変更前の値にアクセスしたいときに参照できる。
137+ 'real_post' => null, // 同、$_POST。
138+ ),
124139 );
140+
141+// environment.php で記述された値を上書きマージ。
142+return array_replace_recursive($settings, include __DIR__.'/environment.php');
--- sites/admin/AdminBaseAction.php (revision 161)
+++ sites/admin/AdminBaseAction.php (revision 162)
@@ -21,7 +21,6 @@
2121 if( !$this->filterByClass('ApiBehaviorFilter') ) {
2222
2323 // 次の変数を全アクションで使えるようにする。
24- $this->renderer['environment'] = AppMojo::setting('environment');
2524 $this->renderer['application'] = AppMojo::setting('application');
2625
2726 // backtoパラメータを解析してヘッダ部分のメニューバック階層を得る。
--- sites/admin/layout.html (revision 161)
+++ sites/admin/layout.html (revision 162)
@@ -73,7 +73,7 @@
7373 <a href="{[url_for action='index']}">
7474 <div style="background-color:black"><img src="{[asset_url path='admin/title.jpg']}" style="width:100%" /></div>
7575 </a>
76- <div id="environment">{[switch value=$environment.environment_type dev='テスト' stage='ステージ' prod='本番']}環境</div>
76+ <div id="environment">{[switch value=$application.environment_type dev='テスト' stage='ステージ' prod='本番']}環境</div>
7777 <!-- 各メニュー -->
7878 <div style="padding:1ex">
7979 <ul class="categories">
--- sites/admin/watch/LogAction.php (revision 161)
+++ sites/admin/watch/LogAction.php (revision 162)
@@ -33,7 +33,7 @@
3333 // 以降、求められているパスはディレクトリと解釈する。
3434
3535 // クリアが指示されているなら実行する。
36- if( @$_POST['clear'] && AppMojo::getEnvironment('environment_type') != 'prod') {
36+ if( @$_POST['clear'] && AppMojo::setting('application', 'environment_type') != 'prod') {
3737
3838 foreach(scandir2($target) as $name) {
3939 if( !in_array($name, ['.gitkeep', '.gitignore'])
--- sites/admin/watch/LogView.html (revision 161)
+++ sites/admin/watch/LogView.html (revision 162)
@@ -27,8 +27,8 @@
2727
2828 <form action="{[url_for _here=true]}" method="post" style="margin:1em 0px">
2929 <hr />
30- <button type="submit" name="clear" value="go" {[if $environment.environment_type=='prod']}disabled="disabled"{[/if]}>このディレクトリをクリアする</button>
31- {[if $environment.environment_type == 'prod']}※本番環境ではクリアは実行できません{[/if]}
30+ <button type="submit" name="clear" value="go" {[if $application.environment_type=='prod']}disabled="disabled"{[/if]}>このディレクトリをクリアする</button>
31+ {[if $application.environment_type == 'prod']}※本番環境ではクリアは実行できません{[/if]}
3232 </form>
3333
3434 {[/block]}
--- sites/global_layout.html (revision 161)
+++ sites/global_layout.html (revision 162)
@@ -19,15 +19,15 @@
1919 return cls;
2020 }
2121 };
22- Runtime["app_base"] = "{[UrlUtil::toAbsolute(AppMojo::getBaseUrl())]}/"; // アプリベースURL
23- Runtime["server_base"] = "{[UrlUtil::toAbsolute($smarty.const.APP_WEB)]}"; // サーバーベースURL
24- Runtime["cdn_base"] = "{[AppMojo::getEnvironment('asset_host')]}/"; // CDNベースURL
25- Runtime["version_stamp"] = {[AppMojo::getVersionStamp()|json nofilter]}; // クライアント側でアセットパスを生成するときに使う汎用更新スタンプ
26- // APIコール時の現在バージョンとしても使う。
22+ Runtime["app_base"] = "{[UrlUtil::toAbsolute(AppMojo::getBaseUrl())]}/"; // アプリベースURL
23+ Runtime["server_base"] = "{[UrlUtil::toAbsolute($smarty.const.APP_WEB)]}"; // サーバーベースURL
24+ Runtime["cdn_base"] = "{[AppMojo::setting('application', 'asset_host')]}/"; // CDNベースURL
25+ Runtime["version_stamp"] = {[AppMojo::getVersionStamp()|json nofilter]}; // クライアント側でアセットパスを生成するときに使う汎用更新スタンプ
26+ // APIコール時の現在バージョンとしても使う。
2727 Runtime["requested_site"] = {[AppMojo::setting('runtime', 'mojo.requested_site')|json nofilter]};
28- // リクエストされているサイト名。サービス名じゃないよ。
28+ // リクエストされているサイト名。サービス名じゃないよ。
2929 Runtime["requested_action"] = {[AppMojo::setting('runtime', 'mojo.requested_action')|json nofilter]};
30- // リクエストされているグループ・アクション名。
30+ // リクエストされているグループ・アクション名。
3131 </script>
3232
3333 {[block name="site-head"]}{[/block]}
@@ -35,7 +35,7 @@
3535 {[block name="head"]}{[/block]}
3636 </head>
3737
38- <body class="{[AppMojo::getFrontController()]}-view {[AppMojo::getEnvironment('environment_type')]}-env" id="edit">
38+ <body class="{[AppMojo::getFrontController()]}-view {[AppMojo::setting('application', 'environment_type')]}-env" id="edit">
3939
4040 <noscript style="display:block; background-color:yellow; color:black; font-weight:bold; text-align:center; padding:1ex">JavaScriptをONにしてください</noscript>
4141