忍者ブログ

CakePHPやZendFrameworkと比べて、「PEARもSmartyも使わずに何でも出来る」というわけではないCodeIgniter。

外部ライブラリの使い方について公式マニュアルには何も書かれていなかったので、少し調べてみました。

CodeIgniter.comのフォーラムで紹介されている「PEAR integration」について

http://codeigniter.com/wiki/PEAR_integration/

「CodeIgniter PEAR」などで検索するといたるところで紹介されているこのフォーラムですが、紹介している人はフォーラムの内容をちゃんと読んでから紹介しているのでしょうか。このフォーラムで解説されているのは…

  1. Controllerを読み込む前にini_setでinclude_pathを設定し直すプログラム
  2. パッケージ名を指定すると、パッケージ名をファイル名に変換してrequire/インスタンス化するプログラム

この2つだけ。これって必要ですか?思わず笑ってしまいました。

1. に関しては、index.phpで指定すればいいだけです。わざわざフックを使う必要は全くありません。
2. に関しては、require文とnew句くらい自分で書きましょうよ…。

CodeIgniterでPEARを使うための準備

まずフォーラムで紹介されている方法を使わずにPEARを使用するための準備をするなら次のようなコードを追加する必要があります。

index.phpにて。

ini_set('include_path', dirname(__FILE__) . PATH_SEPARATOR.BASEPATH . 'application/pear/');

次にフォーラムで紹介されている方法を使ってPEARを使用するための準備はこうなります。フォーラムで紹介されている方法は、上記のようにたった1行で済む準備を、わざわざ使う必要もないCodeIgniterの付属機能を使って、16行で処理しています。

application/config/config.phpにて。

$config['enable_hooks'] = TRUE;

application/config/hooks.phpにて。

$hook['pre_controller'][] = array(
  'class' => 'Pear_hook',
  'function' => 'index',
  'filename' => 'pear_hook.php',
  'filepath' => 'hooks'
);

system/application/hooks/pear_hook.phpにて。

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

class Pear_hook{
  function index(){
    ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.BASEPATH.'application/pear/');
  }
}

?>

CodeIgniterでPEARのパッケージを読み込む

まずフォーラムで紹介されている方法を使わずにPEARのパッケージを読み込むためのコードは次のようになります。

PEARのパッケージを使いたいController内にて。

require_once 'HTTP/Request.php';
$http_request = new HTTP_Request();

次にフォーラムで紹介されている方法を使ってPEARのパッケージを読み込むためのコードはこうなります。

PEARのパッケージを使いたいController内にて。

if(class_exists('Pearloader')){
  $this->load->library('pearloader');
}
$http_request = $this->pearloader->load('HTTP','Request');

さまざまなブログで絶賛されているフォーラムのプログラムを使った方法と、自力で実装する方法と、あなたはどちらのほうが楽だと思いますか?

PEARのファイルを設置するディレクトリについて

CakePHPやZendFrameworkとは異なり、CodeIgniterではPEARなどの外部ライブラリを設置するディレクトリが設けられていません。

application/librariesもapplication/pluginsもapplication/third_partyも外部ライブラリを設置するフォルダではありませんので注意してください。

上記の絶賛フォーラムでは「application/pear」というディレクトリを作っていますが、あえてここでCodeIgniterのコーディングルールをガン無視するのではなく、applicationとは別にpearディレクトリを作ってしまったほうが良いのではとも思います。

PR