LoginSignup
3
1

More than 5 years have passed since last update.

Laravel5.3でLogファサードをフレームワークの外から使う方法

Posted at

ことの始まり

  • 共通化したモジュールをフロント側でつかいたい。
  • 単体テストでif(なんちゃら)とテストのときだけ条件分岐みたいなコードは書きたくない。

Laravelの基本機能が単体でも動くようにしなければなりません!

結論

  • 弊社に業務委託で参加されているエンジニアの尽力により・・・
use PHPUnit_Framework_TestCase;

use Illuminate\Config\Repository;
use Illuminate\Container\Container;
use Illuminate\Events\Dispatcher;
use Illuminate\Support\Facades\Facade;
use Illuminate\Log\Writer;

use Monolog\Logger;

class TestCase extends PHPUnit_Framework_TestCase
{
    public static function setUpBeforeClass()
    {
        $app = new Container();
        $config = new Repository([
            'app.log' => 'daily',
            'app.log_level' => 'debug',
        ]);

        $app->instance('config', $config);
        $app->alias(Dispatcher::class, 'events');

        $app->instance('log', $log = new Writer(new Logger('unittest'), $app['events']));
        Facade::setFacadeApplication($app);
    }
}
  • あとはこのクラスを継承してテストコードを書いていただければ、テスト時にも\Log::debug('hoge'); みたいなコードも動きますのでフレームワークに実際に組み込んだときもそのまま動くというからくりです。
  • これを応用すれば、全てのファサードを使えるようになるはずです。

余談

  • monolog設定もmonologオブジェクトにsetすれば思いのまま使えます。
3
1
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
3
1