FuelPHPをやってみる (15) - パッケージを作る -

2012-11-19T00:00:00+00:00 FuelPHP PHP

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とか)

FuelPHPをやってみる (16) - CSRFに関して - sodaを使ってみる