Yiiの内部にひっそりと佇むutilsディレクトリにお気づきだろうか、マニュアルでもろくに触れられない地味な機能がここに詰まっている
##CVarDumper
その名の通りのver_dump。ただしちょっと便利になっている
<?php
CVarDumper::dump($class, 1);
TestCommand#1
(
[defaultAction] => 'index'
[CConsoleCommand:_name] => 'test'
[CConsoleCommand:_runner] => CConsoleCommandRunner(...)
[CComponent:_e] => null
[CComponent:_m] => null
)
コールは正直冗長だけど、第2引数でdepthが指定できる。大きなクラスをvar_dump()しようとすると出力が超大すぎることがあるので結構ありがたい。
<?php
$dump = CVarDumper::dumpAsString($class);
ダンプした結果を変数で受け取りたいというのはまれによくあるケースで「あれob_startとかでできたっけ…」みたいに思ったりもするがちゃんと用意してくれてる。
##CPropertyValue
値を変換するスタティックメソッドを提供してくれるヘルパーだそうです。
<?php
CPropertyValue::ensureInteger('10sec'); // 10
CPropertyValue::ensureString(false); // 'false'
CPropertyValue::ensureBoolean(true); // true
CPropertyValue::ensureBoolean('hogehoge'); // false
CPropertyValue::ensureBoolean('true'); // true
CPropertyValue::ensureArray('(1,2,3)'); // array(1,2,3)
上記のような事をしてくれます。ensureHogeということで値の型を保証するということですがtrue/falseを文字列にしてくれたりパーレンで囲まれた文字列をArrayとして評価したりといろいろと気をつかってくれています。べつにキャストでいいかな
##CFileHelper.php
ファイルに関するヘルパーです
<?php
CFileHelper::getExtension('hoge/fuga.jpg'); // 'jpg'
CFileHelper::getMimeType('hoge.xml'); // 'application/xml'
なんてちょっとしたことからファイル名で検索できるfindFiles()
とか再帰コピーしてくれるcopyDirectoryRecursive()
とかちょっと便利なものがあります。
##CTimestamp
時間に関するいろいろ
<?php
CTimestamp::getDayOfWeek(2012,12,9); //0(曜日)
CTimestamp::isLeapYear(2012); // true(うるう年判定)
CTimestamp::get4DigitYear(85); //1985
CTimestamp::get4DigitYear(12); //2012
曜日判定やらうるう年判定やら2桁年号の変換やらの小物からGMTとの時差とかdate()
の再実装とか色々入ってます。
##CDatetameParser
strtotime()
とは趣の違った時間表記のパーサー
<?php
CDateTimeParser::parse('2012年12月2日','yyyy年M月d日'); // 1354374000
上記のように文字列とフォーマットを渡すとそのようにパースしてタイムスタンプを返してくれます。
##CMarkdownParser
実はデフォルトでMarkdownが利用できる
<?php
$parser = new CMarkdownParser;
$contents = $parser->safeTransform('#hoge'); // '<h1>hoge</h1>'
利用しているパーサーライブラリはphp Markdown Extra
細かく設定もできるようです
##CFormatter
フォーマットの管理を担うことができます
これだけはインスタンスとして最初からYiiのコアに組み込まれていますのでYii::app()
から呼びます
<?php
Yii::app()->format->boolean(1); //Yes
Yii::app()->format->formatEmail('hoge@hoge.co'); //'<a href="mailto:hoge@hoge.co">hoge/hoge.co</a>'
Yii::app()->format->dateFormat = 'Y年m月d日 H時i分s秒';
Yii::app()->format->formatDate(time()); //"2012年12月09日 04時17分44秒"
アプリケーション内で利用する共通の出力形式をFormatにもつことで統一化が図れます。特にYiiのViewで使うWidgetは勝手に色々と吐き出してくれるのでここは自然といじることになると思います。
というわけでutilsの下に眠る機能の一部を紹介しました。正直半分も使ったことありません。が、覚えてると地味ーに便利だったりすることもあったりなかったりするので覚えても覚えなくてもいいかもしれなくもない。そんなutilsです。