新しいLaravelビルドでは、オーバーライドされたIoCバインディングをアプリケーションのどこでも動作させることができません。職人のときにオーバーライドされたコアクラスが機能しない
たとえば、コアクラスをオーバーライドするサービスプロバイダを想定します。キャッシュ:
class NewServiceProvider extends ServiceProvider
{
protected $defer = true;
public function register()
{
$this->app->singleton('cache', function($app) {
return new \stdClass; // demo purpose
});
}
public function provides()
{
return ['cache'];
}
}
app.providers
configの下部にプロバイダが追加されます。
さて、次へroutes.php
を変更し、結果を確認しに行く:
Route::get('/', function() {
dd(app('cache'));
});
// Results in an empty stdClass being shown. It works!
しかし、artisan tinker
を起動し、同じ操作を行います。
$ php artisan tinker
>>> app('cache')
=> Illuminate\Cache\CacheManager
突然上書きはもはや機能していません。..
イベントリスナーを処理するときと同じ動作が発生します。
これは正常な動作ですか、何か見落としていますか?それとも何らかのバグですか?