CodeIgniter から FuelPHP への移行手順 (不完全)

これは、CodeIgniter 2.x で作成したアプリを FuelPHP へ移行する方法についてのメモです。移行の手間を減らすことを目的にしているため、この方法での移行は、きれいなコードとは言えません。また、このメモは完全ではありません。

関数と定数の移行

config.php に CodeIgniter にのみ存在する関数と定数で、アプリケーションで必要なもののみを追加&作成する。

例えば、

// CodeIgniter constants
define('FILE_READ_MODE',  0644);
define('FILE_WRITE_MODE', 0666);
define('DIR_READ_MODE',   0755);
define('DIR_WRITE_MODE',  0777);

define('FOPEN_READ',                          'rb');
define('FOPEN_READ_WRITE',                    'r+b');
define('FOPEN_WRITE_CREATE_DESTRUCTIVE',      'wb'); // truncates existing file data, use with care
define('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE', 'w+b'); // truncates existing file data, use with care
define('FOPEN_WRITE_CREATE',                  'ab');
define('FOPEN_READ_WRITE_CREATE',             'a+b');
define('FOPEN_WRITE_CREATE_STRICT',           'xb');
define('FOPEN_READ_WRITE_CREATE_STRICT',      'x+b');

// CodeIgniter functions
function get_microtime($e = 7)
{
	list($u, $s) = explode(' ', microtime());
	return bcadd($u, $s, $e);
}

function validation_errors()
{
	$val = Validation::instance();
	return $val->show_errors();
}

function set_value($field, $default = '')
{
	$val = Validation::instance();
	return e($val->input($field, $default));
}

ファイルのコピー

MVC ファイルをコピーする。

Model

モデル名の変更

Model 名に Model_ を付け、拡張する親クラス名から CI_ を削除する。

Email クラスの変更
$this->load->library('email');
$config[...] = ...;
$this->email->initialize($config);

Package::load('email');
$config[...] = ...;
$this->email = Email::forge('default', $config);

$this->email->message() → $this->email->body()

メールの送信処理 $this->email->send() を try〜catch で処理する。

必要に応じて $this->email->clear_recipients() を追加する。

データベース

@TODO

Controller

コントローラ名の変更

Controller 名に Controller_ を付け、拡張する親クラス名から CI_ を削除する。

メソッド名の変更

アクションメソッド名に action_ を付ける。

ヘルパーをロードするコードの削除

$this->load->helper() を削除する。

ライブラリをロードするコードの変更
$this->load->library('form_validation');

$this->form_validation = Validation::forge();
before() メソッドの追加

コンストラクタのコードを before() に移動する。

$this->input を使っている場合は、以下を追加する。

$this->input = new Input();
バリデーションの変更

set_rules() を add_field() に変更する。

バリデーションメソッドでの個別のフィールドの検証のメソッド名を変更する。

$this->form_validation->valid_email($val)

$this->form_validation->_validation_valid_email($val)

バリデーションルールを変更する。

numeric → valid_string[numeric,dots]

$this->input->post() の値を使って処理している場合、FuelPHP では検証済みの値にならないので、$val->validated() に変更する。

モデルをロードするコードの変更
$this->load->model('Mail_model');

$this->Mail_model = new Model_Mail();
ビューをロードするコードの変更

$this->load->view() → return View::forge()

URI セグメントの拡張子の扱い

$this->uri->segment() などで拡張子付きの URI セグメントを扱う場合は、Input::extention() で拡張子を取得して追加する。

ビューにセットする変数

必要に応じて HTML エスケープ処理を外す。

ビュー

ビューをロードするコードの変更

$this->load->view() → echo View::forge()

ヘルパーの変更

ヘルパーを FuelPHP のクラスに変更する。

set_value() → 関数作成

validation_errors() → 関数作成

h() → e() あるいは削除

form_ → Form::

site_url() → Uri::create()