FuelPHPをやってみる (15) - パッケージを作る -
fuel/packagesにディレクトリを作って
├── bootstrap.php ├── classes └── tests
んな感じで構成を作って(正確にはbootstrap.phpがあれば構造はどんな感じでも良いかもtestsディレクトリを除いては)、fuel/app/config/config.phpでパッケージ利用設定を行えば、定義されたクラス群等を利用する事出来る模様。という事でやってみる
fuel/packages/sample/classes/sample.php
<?php
namespace Test;
class Sample {
public static function say() {
return Response::forge("hoge fuga foobar");
}
}
とりまぁ適当に。ただ作るだけじゃロード出来ない(はず)のでbootstrap.phpを作成
fuel/packages/sample/bootstrap.php
<?php
// パッケージのネームスペースをグローバルにエイリアス出来る
Autoloader::add_core_namespace("Test");
// 利用するクラスを登録
Autoloader::add_classes(array(
"TestSample" => __DIR__ . "/classes/sample.php"
));
fuel/app/config/config.php
<?php
return array(
"always_load" => array(
"packages" => array(
"sample"
)
)
);
作ったsampleパッケージを参照するように設定するだけ
fuel/app/classes/controller/home.php
<?php
class Controller_Home extends Controller {
public function get_index() {
return Sample::say();
}
}
今回、sampleパッケージのクラスでTestネームスペースを持っているけど、bootstrap.phpでadd_core_namespaceでエイリアスしているので普通にクラス名だけでアクセス可能。もしやってない場合は
TestSample::say();
みたいにネームスペースを含んだクラス名を指定しないといけない模様。まぁこれで終わりなんですが、fuel/core/phpunit.xmlに
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" stopOnFailure="false" bootstrap="../core/bootstrap_phpunit.php">
<testsuites>
<testsuite name="packages">
<directory suffix=".php">../packages/*/tests</directory>
</testsuite>
</testsuites>
</phpunit>
という風になってるはずなのでパッケージ内のtestsディレクトリにテスト置けば認識されると思われる。なので単純だけどテスト書いてみる
fuel/packages/sample/tests/sample_test.php
<?php
class Test_Sample extends TestCase {
public function test_say() {
$res = Sample::say();
$this->assertEquals("hoge fuga foobar", $res->body);
}
}
という感じ。ちょっと今回で分かったのはFuelPHPではコアな所もグローバルなネームスペースにエイリアスされていると思うけど、ちゃんとグローバルネームスペースだというのを意識したコードで書いた方が良いのではと(ResponseじゃなくてResponseとか)