LoginSignup
6
6

More than 5 years have passed since last update.

Yii 1.1.x で PHPExcel ライブラリを使う

Last updated at Posted at 2012-12-26

PHPExcel は、PHP で Excel のファイルを読み書きできる非常に便利なライブラリです。
もちろん、Yii-framework と一緒に使うことも出来ます。

ただし、PHPExcel のようにそれ自身がオートローダを持っているライブラリを Yii で使うときには、ちょっとした注意が必要です。

<?php

// Yii のオートローダを一旦登録解除する
spl_autoload_unregister(array('YiiBase', 'autoload'));

// PHPExcel のオートローダを登録する ... PHPExcel.php の中でやっている
$phpExcelPath = Yii::getPathOfAlias('ext.phpexcel');
include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');

// Yii のオートローダを改めて登録する
spl_autoload_register(array('YiiBase', 'autoload'));

...

// Yii のオートローダが働く
$models = SomeModel::model()->findAll();

...

// PHPExcel のオートローダも働く
$objReader = PHPExcel_IOFactory::createReader('Excel5');

...

上記のようにすることで、Yii のオートローダと PHPExcel のオートローダの両方をお互いに干渉することなく動作させることが出来ます。PHPExcel のコードは一行もいじる必要はありません。

キモは、オートローダの登録の順序です。

Yii のオートローダは、ロードすべきファイルが見つからないと例外を投げます。と言うことは、後から登録された別のオートローダは、何もするチャンスを与えられない、という事になります。一方、PHPExcel のオートローダは、ファイルが見つからなかった場合には false を返して、後に続く別のオートローダに席を譲ります。

この点は、滅多にない Yii における設計の失敗、と言ってよいかもしれません。ともかく、順序を変えてやれば無問題、という次第です。

PHPExcel をラップした Yii のためのエクステンションも存在しますが、オートローダの処理を間違ってコケる事があるようです。素の PHPExcel をお奨めします。

あ、PHPExcel の解説だと思った人、ごめんなさい。

なお、また、上記は Yii 1.1.x のための記事です。 Yii 2.0 では、オートローダの問題は無くなりました。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6