Yii Guide
........................................................................................Problem with Date if you have PHP 5.3
http://www.yiiframework.com/doc/guide/1.1/en/quickstart.first-app#c275
これは PHP 5.3 以上を使用している場合に予想されるタイムゾーンに関してのエラーです。「PHP 5.3 タイムゾーン」などと検索したら、解決策がたくさん出てきます。Yii の場合は /config/main.php で 'timezone' => 'Asia/Tokyo' と指定すると解決しますが、他のフレームワークなどでも同様のエラーが発生することも考えられるので php.ini で設定したほうが良いかもしれません。
参考リンク
[PHP] PHP5.3の新機能 - 日付時刻(DateTime)関連のクラスや関数
........................................................................................
Little advice
http://www.yiiframework.com/doc/guide/1.1/en/database.dao#c2729
これはテーブルプレフィックスを使用していない場合でも /config/main.php のデータベース設定箇所に 'tablePrefix' => '' を追加すると {{ tableName }} と書かれた場所でもエラーが出なくなる、というもの。例えば yii-user というエクステンションを使った場合、デフォルトでは tbl_ というプレフィックスが付いていますが、tbl_ がいらない場合にSQLの tbl_ 箇所だけ削除すればOKになります。'tablePrefix' => '' を書いていなければ、UserModule.php の tableUsers プロパティなどが {{ users }} と設定されているのでエラーが出ます。
........................................................................................
Setting nested modules
http://www.yiiframework.com/doc/guide/1.1/en/basics.module#c1746
これはモジュールの中にモジュールを作る場合の設定方法。モジュールのネストってのは、ディレクトリの階層がどんどん深くなって、わけがわからなくなりそうですが...。
........................................................................................
PDO bindParam not working for LIKE condition
http://www.yiiframework.com/doc/guide/1.1/en/database.dao#c132
これは LIKE condition を作るときには、プリペアードステートメントのところに '%' を直接書かずに、あとに書こう、というものですね。
........................................................................................
DefaultScope with dynamic table alias
http://www.yiiframework.com/doc/guide/1.1/en/database.ar#c5329
自分はこういうものを見るとわくわくします。defaultScope() は、モデルの find 系が呼ばれたときに引っ付いてくるもの。例えば上記のリンクのコメントのコードの場合、findAll() を呼ぶと SELECT * FROM `hoge` `t` WHERE t.actif =1 ORDER BY t.update_time DESC; という SQL 文ができます。例えば管理画面の親モデルでこれを書くと、各バックエンドモデルでは、常に上記のような SQL 文になるので、condition やorder コードの記述が軽減できます (actif は多分 active や status などと同様の意味と思われます) 。
参考リンク
CActiveRecord::defaultScope()
CActiveRecord::getTableAlias()
........................................................................................
Tips
http://www.yiiframework.com/doc/guide/1.1/en/database.ar#c1907
1. CActiveRecord::beforeSave() や beforeDelete() をオーバーライドする場合は、bool 値を return しなければいけない、というものです。要は true を返せば上手くいくと、いうことです。ただ問題がひとつあって、親モデル (例えば ActiveRecord.php) が存在して、かつそこで beforeSave() をオーバーライドし、子モデルでも beforeSave() をオーバーライドしている場合、true だけでは子モデルの処理しかしなくなります。子モデルでtrueした時点で処理が終わっちゃうからですが、そういう場合は、子モデルでは parent::beforeSave() を return すると親子どちらも上手く処理してくれます。
2.「1 か 0 で保存しているデータを yes と no で表示する」みたいなことはよくあるかと思いますが、そういう場合に afterFind() を利用すると、保存時に beforeSave() をオーバーライドしなければいけなくなるので、できたらビューでやろう、ってことですかね?確かに afterFind() の誘惑に誘われることがよくあります。
3, 4は翻訳できないので省略します(苦笑)
5. findAll() で取得したものは型がオブジェクトで、DAO の queryAll() は連想配列、ということですね。
参考リンク
CActiveRecord
........................................................................................
Generic Column Types
http://www.yiiframework.com/doc/guide/1.1/en/database.migration#c3879
これはマイグレーションのコードを書くときに参考になります。例えば 'hoge' => 'string' と書くと、MySQL の場合は varchar(255) に変換される、という具合です。
参考リンク
CDbSchema::getColumnType()
........................................................................................
Great feature
http://www.yiiframework.com/doc/guide/1.1/en/database.migration#c2550
これはデータベーススキーマがある場合、そのスキーマをコンソール上でダンプしてくれるものです (Yii のコアにもあってよさそうな機能なんですが... ) 。Yii 以外で作ったプロジェクトを Yii に移行するときに、いちいちマイグレーションのコードを長々と書かなくて済むので便利です。ただ、インデックス、外部キー制約は自分で書かないといけないようです。使い方としては、コードをコピペして、DumpSchemaCommand.php というファイルを作ってペーストし、/command 下に置きます。あとはコンソールで protected まで移動して yiic dumpschema データベース名 で、ずらーっとコードが出てくるので、それをコピーして、マイグレーションファイルにペーストします。 あ、あと、$this->dropTable() も自分で書かないといけないですね。
........................................................................................
User phpMyAdmin to create fixture arrays
http://www.yiiframework.com/doc/guide/1.1/en/test.fixture#c2957
これはもしデータベースにサンプルのデータを持っていれば、phpMyAdmin のエクスポートのフォーマットで PHP 配列 を指定してあげると、フィクスチャ (PHPUnit) が作れる、というものです。知らなかったので、なるほど!と思いました。
........................................................................................
yiilite and APC
http://www.yiiframework.com/doc/guide/1.1/en/topics.performance#c596
これは yiilite と APC の組み合わせは最強、ということです。APC が使えないレンタルサーバってけっこうありそうですけど...
........................................................................................
Yii API
........................................................................................
Layout for the Module
http://www.yiiframework.com/doc/api/1.1/CModule#c3283
モジュールを作ったことがある人は一度はハマる箇所だと思います。
//layouts/layout は protected/views/layouts
/layouts/layout は protected/modules/module/views/layouts
を呼び出す、ということです。
........................................................................................
Behavior in afterSave()
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#c3265
これは afterSave() が完了するまで $this->isNewRecord は false にならないよ。でも $this->id で値の取得はできるよ、ってところでしょうか。CActiveRecord::insert() のコードを見れば、コードの流れがよくわかるかと思います。
参考リンク
CActiveRecord::insert()
........................................................................................
Example of usage:
http://www.yiiframework.com/doc/api/1.1/CRegularExpressionValidator#c3090
これはバリデーションで正規表現を使うときの例です。
........................................................................................
CController::id
http://www.yiiframework.com/doc/api/1.1/CController#c4276
これは CController::id と PHP の ucfirst() を利用すると、自動的にモデル名を生成できるよってことです。コントローラIDとモデル名が一致していないといけませんが、これを覚えておくことで、コードの再利用性がかなり上がります。
参考リンク
CController::id
........................................................................................
Examples of CHttpRequest properties for a given URL
http://www.yiiframework.com/doc/api/1.1/CHttpRequest#c1967
これは CHttpRequest のそれぞれのプロパティで何を取得できるか、リストにしたものです。とても見やすくありがたいですね!
........................................................................................
errorCode has predefined ERROR_ constants
http://www.yiiframework.com/doc/api/1.1/CBaseUserIdentity#c2217
CBaseUserIdentity クラスにはこんな定数が設定されている、というものです。ERROR_UNKNOWN_IDENTITY = 100; の意味が初めさっぱりわかりませんでした。というより Yii はログイン処理の流れが複雑なような気がします。今でもなんとなくの理解で、説明しろと言われてもなかなか上手く説明できません。でも、ある程度わかってくると、Yii の得意分野ですが、拡張性が優れていることがわかってきます。例えば、パスワードにストレッチング処理の機能を追加しようとしたとき、Yii ならわりと簡単にできます。CakePHP (1.3系) の場合は逆で、ログイン処理の流れはとてもシンプルですが、拡張しようと思ったら ... です。
........................................................................................
active items
http://www.yiiframework.com/doc/api/1.1/CMenu#c2351
これは zii.widgets.CMenu の items プロパティでの言及ですが、url キーに対する値は配列かつ、'/コントローラID/アクションID' と記述しないと active が正常に動作しません、というものです。例えば '/site' と書いちゃうと動作しません。しっかり '/site/index' と書かないと、今いるページがどこなのかメニューバーで判断できなくなるということです。
0 件のコメント:
コメントを投稿