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