Yiiを使う
YIIに乗り換える
FuelPhpで本サイト変更でCodeIginter(CI)からFuelphpに変更をしようとしたが、勉強がてらYIIに更に変更することにした。
本家
http://www.yiiframework.com/。ドキュメントは一部日本語化されてるようだけど、APIのレファレンスは英語(ここらへんはCIとは違う)。ドキュメントは膨大。
動作構造のトレース情報
http://choco-moca.pugpug.org/wp/?cat=26が今から3年前のものだけど、とても参考になる。
実装例としてblogアプリのチュートリアル
blogは配布ソースのdemosの一つ。
http://www.yiiframework.com/doc/blog/1.1/ja/start.overview
インストール
インストールは、tar zxvf 後の展開ディレクトリにあるframework/yiicで作る。
指定ディレクトリにindex.php、またprotectedディレクトリが出来て、そのもとで開発することになる。
なおyii本体は、index.php で
$yii=dirname(__FILE__).'/../yiicを発行したyiiの展開ディレクトリ/framework/yii.php'
となっており、本体(ライブラリなど)はそこに存在する。
作業履歴
CI/Kohana/Fuelを使っていた感覚から言えば、色々使い勝手が結構違うので最初は戸惑った。
configの設定のしかた
protected/config/main.php
が基本。
後に書くように「ルーティング」もそこで設定。
params キーに登録。呼び出し。
同main.phpは以下に引用するように、デフォルトのindex.phpの肝となっている。
index.php
<?php
// change the following paths if necessary
$yii=dirname(__FILE__).'/../yii-1.1.9.r3527/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
require_once($yii);
Yii::createWebApplication($config)->run();
main.phpは配列をreturnするだけのものだが、独自サイトの各種定義は、その配列の'params'で行う(のだとおもう)。
paramsは、以後YII::app()->params[配列名] でアクセス出来る。
config/main.phpにはパラメタを登録したくない場合
params用独自ファイルを作って定義する
'params'=> require(dirname(__FILE__).'/myConfig.php')
として
myConfig.phpに
return array(array("キー"=>"値"),
.....
などとする。
yamlを使う
params配列にyamlファイルで独自設定をしたい。
上で言えばyamlファイルを作って、myConfig.phpに
return yaml_parse_file(dirname(__FILE__).'/something.yml');
とすればいい。
この場合はインストールされているPHPが同関数を含んでいる必要がある。
なければyamlのPHPライブラリがいくつかあるのでそれを使えばいい(spcyとか)。
「ルーティング」
ルーティングはprotected/config/main.phpの'urlManager'で行うようだ(他にあるかどうかはまだわかってません)。
詳細はhttp://www.yiiframework.com/doc/guide/1.1/en/topics.url。
.htaccessとmod_rewriteでURLからindex.phpを外す
http://www.yiiframework.com/doc/guide/1.1/en/topics.urlに書かれているが、.htaccessでmod_rewrite設定し、かつurlManagerの 'showScriptName'=>FALSEを設定する。
.htaccessは
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
ルーティング
YIIのルーティングも基本は、コントローラ/メソッドで、デフォルトコントローラSiteController、デフォルトメソッドactionIndexの場合は未指定でルート付けされる。
ルーティング規則は'urlManager'=>array('rules'=>array(URL正規表現=>コントローラ/メソッド)..で設定出来る。
urlリクエストへのアクセス
Yii::app()->request;
でOK。
Yii::app()->request->url;
とかあれこれ可能。
Model
基本ファイルベースでの利用なのでModelとか大げさのように思うが、コントローラにあれこれ書くのは好まない。
データ操作に関する物はModelにする。
ファイル操作用extensionを使う
http://www.yiiframework.com/extension/cfile/
便利であるがhtmlファイルのつもりで書いたファイルのmimeType判定が誤動作。
extensionの問題ではなくて読み込んでいるファイル冒頭周辺にhtmlタグが含まれていないことが原因だと思われる(単なるbodyのテキストファイルだから)。この点は注意(*1)。
*1: 判定順序はKohanaと近似:http://bsn.river.tc/kohana/basic/mime.html
this file --> last modified:2012-03-31 13:57:51