CakePHP の bootstrap.php と core.php を 全訳 しました!!
PHP Advent Calendar 2012 の3日目です。
CakePHP の bootstrap.php と core.php の中って、ドキュメントばりに一杯コメント書いてあるんですが、全部英語なので、素敵な仕様も埋もれちゃってるかなあなんて思い、ここは全訳して、一つ一つ見ていこうかと思います!
(bootstrap.php の日本語バージョンはこちら。)
(core.php の日本語バージョンはこちら。)
■■ 1. bootstrap.php
■1-1) 冒頭
■1-2) キャッシュエンジンの設定
■1-3) App::buildの設定
たとえば、下記のようにすると、デフォルトの /app/Model に加え、/app/WebAPI からもモデルを探しにいくようになります。
ROOT や DS の定数は index.php で定義されているものです。
■1-4) Inflector ルール
rules では、正規表現を使って一般的な語形変化ロジックを指定します。
例) rules => array('/$/' => 's')
irregular は、変換のテーブルを連想配列で渡します。
uninflected は変換しない単語を配列で渡します。
ちなみに、日本人にとっては複数形をなぜわざわざ使うのか判りづらいかもしれませんね。
たとえばなぜ Controller を複数形にしたいかというと、/items/ というURLで item のリストを出したいし、
/items/12 という URL で items の中の id=12 の item の詳細を出したい、
という感覚によるものですが、なんとなく判りますでしょうか?
ちなみに下記のようにすると、単数形・複数形の変換を完全にOFFにすることができます。
全部単数形でOKになります。
■1-5) プラグインの読み込み
loadAll ではプラグインのディレクトリにあるすべてのプラグインが読み込まれます。
■1-6) Dispatcher の設定
■1-7) ログ出力の設定
core.php 編へつづく。
PHP Advent Calendar 2012 の3日目です。
CakePHP の bootstrap.php と core.php の中って、ドキュメントばりに一杯コメント書いてあるんですが、全部英語なので、素敵な仕様も埋もれちゃってるかなあなんて思い、ここは全訳して、一つ一つ見ていこうかと思います!
(bootstrap.php の日本語バージョンはこちら。)
(core.php の日本語バージョンはこちら。)
■■ 1. bootstrap.php
■1-1) 冒頭
/**ここは特にそのままなので、次いきまーす。
* このファイルは app/webroot/index.php から自動的に読み込まれ、core.php の後に
* 読み込まれます。
*
* このファイルはアプリケーション全体の設定を作成する/読み込むのに使ってください。
* 例: キャッシュ、ログ、別の設定ファイルの読み込みなど。
*
* また、あなたのアプリケーションで使う、グローバルな関数/定数の定義ファイルを
* include するのにもこのファイルを使ってください。
*
* PHP 5
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* ファイルの再配布には上記の著作権表示が必須です。
*
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @package app.Config
* @since CakePHP(tm) v 0.10.8.2117
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
■1-2) キャッシュエンジンの設定
/**ここでは、使いたいキャッシュエンジンを選んで、指定します。
* キャッシュエンジンの設定。
* デフォルトの設定は以下のとおり。
*
* ファイル・ストレージ・エンジン。
*
* Cache::config('default', array(
* 'engine' => 'File', //[必須]
* 'duration' => 3600, //[省略可]
* 'probability' => 100, //[省略可]
* 'path' => CACHE, //[省略可] システムの tmp ディレクトリを使う。注:絶対パスであること。
* 'prefix' => 'cake_', //[省略可] prefix every cache file with this string
* 'lock' => false, //[省略可] ファイル・ロックを使う。
* 'serialize' => true, //[省略可]
* 'mask' => 0666, //[省略可] キャッシュ・ファイルを生成した際に使うパーミッション・マスク
* ));
*
* APC (http://pecl.php.net/package/APC)
*
* Cache::config('default', array(
* 'engine' => 'Apc', //[必須]
* 'duration' => 3600, //[省略可]
* 'probability' => 100, //[省略可]
* 'prefix' => Inflector::slug(APP_DIR) . '_', //[省略可] この文字列を各キャッシュファイルの接頭辞として使う。
* ));
*
* Xcache (http://xcache.lighttpd.net/)
*
* Cache::config('default', array(
* 'engine' => 'Xcache', //[必須]
* 'duration' => 3600, //[省略可]
* 'probability' => 100, //[省略可]
* 'prefix' => Inflector::slug(APP_DIR) . '_', //[省略可] この文字列を各キャッシュファイルの接頭辞として使う。
* 'user' => 'user', //xcache.admin.user の設定値から user を取得する。
* 'password' => 'password', //平文のパスワード (xcache.admin.pass)
* ));
*
* Memcache (http://memcached.org/)
*
* Cache::config('default', array(
* 'engine' => 'Memcache', //[必須]
* 'duration' => 3600, //[省略可]
* 'probability' => 100, //[省略可]
* 'prefix' => Inflector::slug(APP_DIR) . '_', //[省略可] この文字列を各キャッシュファイルの接頭辞として使う。
* 'servers' => array( //[省略可]
* '127.0.0.1:11211' // localhost, デフォルトのポートは 11211
* ),
* 'persistent' => true, // [省略可] 非持続接続(non-persistent connections)にしたいなら false に設定する。
* 'compress' => false, // [省略可] Memcache のデータを圧縮する(遅くなるがメモリを節約できる)
* ));
*
* Wincache (http://php.net/wincache)
*
* Cache::config('default', array(
* 'engine' => 'Wincache', //[必須]
* 'duration' => 3600, //[省略可]
* 'probability' => 100, //[省略可]
* 'prefix' => Inflector::slug(APP_DIR) . '_', //[省略可] この文字列を各キャッシュファイルの接頭辞として使う。
* ));
*
* Redis (http://http://redis.io/)
*
* Cache::config('default', array(
* 'engine' => 'Redis', //[必須]
* 'duration' => 3600, //[省略可]
* 'probability' => 100, //[省略可]
* 'prefix' => Inflector::slug(APP_DIR) . '_', //[省略可] prefix every cache file with this string
* 'server' => '127.0.0.1', // localhost
* 'port' => 6379, // デフォルトのポートは 6379
* 'timeout' => 0, // タイムアウトの秒数。0 は無制限。
* 'persistent' => true, // [省略可] 非持続接続(non-persistent connections)にしたいなら false に設定する。
* ));
*/
Cache::config('default', array('engine' => 'File'));
■1-3) App::buildの設定
/**CakePHP 関連のディレクトリの Path を通す感じです。
* 下記の設定で、モデル、ビュー、コントローラのパスを追加することができます。
*
* App::build(array(
* 'Model' => array('/path/to/models', '/next/path/to/models'),
* 'Model/Behavior' => array('/path/to/behaviors', '/next/path/to/behaviors'),
* 'Model/Datasource' => array('/path/to/datasources', '/next/path/to/datasources'),
* 'Model/Datasource/Database' => array('/path/to/databases', '/next/path/to/database'),
* 'Model/Datasource/Session' => array('/path/to/sessions', '/next/path/to/sessions'),
* 'Controller' => array('/path/to/controllers', '/next/path/to/controllers'),
* 'Controller/Component' => array('/path/to/components', '/next/path/to/components'),
* 'Controller/Component/Auth' => array('/path/to/auths', '/next/path/to/auths'),
* 'Controller/Component/Acl' => array('/path/to/acls', '/next/path/to/acls'),
* 'View' => array('/path/to/views', '/next/path/to/views'),
* 'View/Helper' => array('/path/to/helpers', '/next/path/to/helpers'),
* 'Console' => array('/path/to/consoles', '/next/path/to/consoles'),
* 'Console/Command' => array('/path/to/commands', '/next/path/to/commands'),
* 'Console/Command/Task' => array('/path/to/tasks', '/next/path/to/tasks'),
* 'Lib' => array('/path/to/libs', '/next/path/to/libs'),
* 'Locale' => array('/path/to/locales', '/next/path/to/locales'),
* 'Vendor' => array('/path/to/vendors', '/next/path/to/vendors'),
* 'Plugin' => array('/path/to/plugins', '/next/path/to/plugins'),
* ));
*
*/
たとえば、下記のようにすると、デフォルトの /app/Model に加え、/app/WebAPI からもモデルを探しにいくようになります。
App::build(array(なお App::PREPEND の代わりに、App::APPEND を指定すると、デフォルトよりも優先して(先に)探しにいきます。
'Model' => array(ROOT.DS.'app'.DS.'WebAPI'),
), App::PREPEND);
ROOT や DS の定数は index.php で定義されているものです。
■1-4) Inflector ルール
/**テーブル名やコントローラ名は複数形でモデル名は単数形ですが、これらを相互に変換するためのロジックを定義します。(デフォルトならもちろん不要です。)
* 独自の Inflector ルール。
* テーブル名や、モデル名、コントローラ名、単複形変換関数に渡されるすべての文字列を正しく単数形や複数形に変換するための設定。
*
* Inflector::rules('singular', array('rules' => array(), 'irregular' => array(), 'uninflected' => array()));
* Inflector::rules('plural', array('rules' => array(), 'irregular' => array(), 'uninflected' => array()));
*
* ※ singular : 単数形 / plural : 複数形
* ※ rules : 語尾変化ルール / irregular : 不規則変化 / uninflected : 語尾変化しない
*
*/
rules では、正規表現を使って一般的な語形変化ロジックを指定します。
例) rules => array('/$/' => 's')
irregular は、変換のテーブルを連想配列で渡します。
uninflected は変換しない単語を配列で渡します。
ちなみに、日本人にとっては複数形をなぜわざわざ使うのか判りづらいかもしれませんね。
たとえばなぜ Controller を複数形にしたいかというと、/items/ というURLで item のリストを出したいし、
/items/12 という URL で items の中の id=12 の item の詳細を出したい、
という感覚によるものですが、なんとなく判りますでしょうか?
ちなみに下記のようにすると、単数形・複数形の変換を完全にOFFにすることができます。
全部単数形でOKになります。
//全ての単語をそのまま使う(語形変化しない)。
Inflector::rules('plural', array('rules' => array('/^(.*)$/' => '\1')));
■1-5) プラグインの読み込み
/**ここでプラグインを読み込みます。
* プラグインは手動で読み込む必要があります。1つ1つロードすることも、1回の呼び出しで全部を読み込むこともできます。
* 必要に応じて、以下のどちらかのコメントアウトを解除してください。
* より高度なプラグインの読み込み方法については、CakePlugin のドキュメントを確認してください。
*
* CakePlugin::loadAll(); // 一度にすべてのプラグインを読み込む。
* CakePlugin::load('DebugKit'); //DebugKit という名前のプラグイン1個を読み込む。
*
*/
loadAll ではプラグインのディレクトリにあるすべてのプラグインが読み込まれます。
■1-6) Dispatcher の設定
/**リクエストの前後に処理を加えることができます。
* イベント・リスナーをリクエストのライフサイクルに組み込むことが可能です。CakePHPはデフォルトで2つのフィルターを組み込むます。
*
* - AssetDispatcher フィルターは、あなたのテーマとプラグインから資産ファイル(css, images, js 等)を供給します。
* - CacheDispatcher フィルターは、Cache.check の configure の値を読み、コントローラにより作成済みのキャッシュされたコンテンツを供給しようと試みます。
*
* あなたのアプリケーションに合わせて、好きなように追加/削除してください。
* 使用例:
*
* Configure::write('Dispatcher.filters', array(
* 'MyCacheFilter', // あなたの app 内の、Routing/Filter パッケージから MyCacheFilter クラスを使います。
* 'MyPlugin.MyFilter', // MyPlugin プラグイン内の、 Routing/Filter パッケージから MyFilter クラスを使います。
* array('callable' => $aFunction, 'on' => 'before', 'priority' => 9), // beforeDispatch で呼び出される、PHP コールバック形式での有効な記述
* array('callable' => $anotherMethod, 'on' => 'after'), // afterDispatch で呼び出される、PHP コールバック形式での有効な記述
* ));
*/
Configure::write('Dispatcher.filters', array(
'AssetDispatcher',
'CacheDispatcher'
));
■1-7) ログ出力の設定
/**ログ出力の設定です。
* デフォルトで使われる、ファイルにログを出力する際のオプション。
*/
App::uses('CakeLog', 'Log');
CakeLog::config('debug', array(
'engine' => 'FileLog',
'types' => array('notice', 'info', 'debug'),
'file' => 'debug',
));
CakeLog::config('error', array(
'engine' => 'FileLog',
'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
'file' => 'error',
));
core.php 編へつづく。
コメント