😀

FuelPHP -- 1.5系でcomporserを導入する --

2022/11/28に公開

FuelPHP1.6からはcomposerが導入されるらしいですがまだdev版なので1.5系でcomposerを使用する為の方法を記載していきます

環境

  • centos6.3
  • fuelPHP1.5.3

事前準備に必要なもの

参考にしたサイト

composerでいれるもの

ユニットテストを書くのでPHPUnit系のものを入れたいとおもいます。
今回入れるものは下記を入れます。

  • phpunit/phpunit
  • mockery/mockery
  • phpunit/dbunit
  • phpunit/phpunit-selenium
  • phpunit/phpunit-story
  • phing/phing
  • pdepend/pdepend
  • phpmd/phpmd
  • squizlabs/php_codesniffer
  • behat/behat
cd fuelPHPのカレントディレクトリ
vim composer.json
composer.json
{
    "require": {
        "phpunit/phpunit": "3.7.*",
        "mockery/mockery": "0.7.*",
        "phpunit/dbunit": ">=1.2",
        "phpunit/phpunit-selenium": ">=1.2",
        "phpunit/phpunit-story": "*",
        "phing/phing": "dev-master",
        "pdepend/pdepend": "dev-master",
        "phpmd/phpmd": "dev-master",
        "squizlabs/php_codesniffer": "dev-master",
        "behat/behat": "2.4.*@dev"
    },
    "config": {
        "bin-dir": "FuelPHPのカレントディレクトリのフルパス/fuel/app/vendor/bin",
        "vendor-dir": "FuelPHPのカレントディレクトリのフルパス/fuel/app/vendor"
    }
}

install

コマンド一発

cd fuelPHPのカレントディレクトリ
composer update

Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing mockery/mockery (0.7.2)
    Loading from cache

  - Installing symfony/yaml (v2.2.0)
    Loading from cache

  - Installing phpunit/php-text-template (1.1.4)
    Loading from cache
    .
    .
    .
    .

mockery/mockery suggests installing Hamcrest (1.0.0)
phpunit/phpunit suggests installing phpunit/php-invoker (>=1.1.0,<1.2.0)
symfony/event-dispatcher suggests installing symfony/http-kernel (2.2.*)
behat/behat suggests installing behat/symfony2-extension (for integration with Symfony2 web framework)
behat/behat suggests installing behat/yii-extension (for integration with Yii web framework)
behat/behat suggests installing behat/mink-extension (for integration with Mink testing framework)
Writing lock file
Generating autoload files

確認

fuel/app/vendor/以下に入れたいパッケージがあればOK

ll fuel/app/vendor/
合計 4
-rw-r--r-- 1 root root 182  320 14:55 2013 autoload.php
drwxr-xr-x 1 root root 136  320 14:54 2013 behat
drwxr-xr-x 1 root root 306  320 14:55 2013 bin
drwxr-xr-x 1 root root 272  320 14:55 2013 composer
drwxr-xr-x 1 root root 102  320 14:53 2013 mockery
drwxr-xr-x 1 root root 102  320 14:53 2013 pdepend
drwxr-xr-x 1 root root 102  320 14:53 2013 phing
drwxr-xr-x 1 root root 102  320 14:54 2013 phpmd
drwxr-xr-x 1 root root 408  320 14:54 2013 phpunit
drwxr-xr-x 1 root root 102  320 14:54 2013 squizlabs
drwxr-xr-x 1 root root 306  320 14:54 2013 symfony

PHPUnitの設定をconfigでオーバーライドする

このままではFuelPHPのテストをかくことができません。なぜならばFuelPHPのPHPUnitはデフォルトでフルパスで指定しないでphpunitコマンドで実行しようとするからです。

/fuel/packages/oil/config/oil.php
return array(
	'phpunit' => array(		
		'autoload_path' => 'PHPUnit/Autoload.php' ,
		'binary_path' => 'phpunit' ,
	),
);

このpackageの設定ファイルをfuel/app/configにコピーして設定を変更しましょう

cp fuel/packages/oil/config/oil.php fuel/app/config/
fuel/app/config/oil.php
#編集前
		'autoload_path' => 'PHPUnit/Autoload.php' ,
		'binary_path' => 'phpunit' ,
#編集後
		'autoload_path' => dirname(COREPATH).'/app/vendor/autoload.php' ,
		'binary_path' => dirname(COREPATH).'/app/vendor/bin/phpunit' ,

fuel oil testコマンドが動くか確認してみる

確認しましょう

php oil test
Tests Running...This may take a few moments.
PHPUnit 3.7.18 by Sebastian Bergmann.

Configuration read from /home/web/lo.fuel.base.org/fuel/core/phpunit.xml

...............................................................  63 / 330 ( 19%)
............................................................... 126 / 330 ( 38%)
............................................................... 189 / 330 ( 57%)
............................................................... 252 / 330 ( 76%)
............................................................... 315 / 330 ( 95%)
...............

Time: 4 seconds, Memory: 21.75Mb

OK (330 tests, 350 assertions)

動きましたがこれだとfuel本体のテストを毎回していてウザいですね

phpunit拡張用にphpunit.xmlもpacakageから持ってくる

普段の開発ではcoreとpackage(Fuelが提供しているもの)はテストの必要がないはずなので設定を変更しましょう。

cp fuel/core/phpunit.xml fuel/app/phpunit.xml
fuel/app/phpunit.xml
#修正前
		<testsuite name="core">
			<directory suffix=".php">../core/tests</directory>
		</testsuite>
#修正後
		<!--		<testsuite name="core">
			<directory suffix=".php">../core/tests</directory>
		</testsuite> -->

再度確認

もう一回確認してfuel/app/phpunit.xmlに設定が向いているか確認しましょう

php oil test

Tests Running...This may take a few moments.
PHPUnit 3.7.18 by Sebastian Bergmann.

Configuration read from /home/web/lo.fuel.base.org/fuel/app/phpunit.xml



Time: 0 seconds, Memory: 3.50Mb

No tests executed!

fuel/app/phpunit.xmlの設定が反映されましたね。

PHPUnit以外のcomposerも動作させるためには

上記はこれはあくまでPHPUnitの設定だけで他のcomporserのパッケージはこれでは動きませんので
bootstrap.phpにcomposerのautoload.phpをreqiureしてあげましょう。

fuel/app/bootstrap.php
// Register the autoloader
Autoloader::register();

#追加
// Composer
require APPPATH.'/vendor/autoload.php';

ポイントはUsing Composer with FuelPHP 1.xでも記載されている通りにAutoloader::register();の後にcomposerのautoload.phpをrequireすることみたいです。(理由までは調べてませんが)

これでvendorパッケージ管理が容易になるかと思います。

Discussion