如何为 GeneratorCommand 交换文件系统

How to swap Filesystem for GeneratorCommand

在 Artisan 服务提供商中:

$this->app->singleton('command.request.make', function ($app) {
    return new RequestMakeCommand($app['files']);
});

Illuminate/Foundation/Providers/ArtisanServiceProvider.php

正在构建一个 class 扩展:Illuminate/Console/GeneratorCommand.php

我的问题是,有没有办法替换包服务提供商中该命令/所有 GeneratorCommand 的绑定 $app['files']?但不在其他任何地方替换文件系统?我想像这样扩展它:

<?php

namespace Package;

use Illuminate\Filesystem\Filesystem;

class Override extends Filesystem
{
    public function put($path, $contents, $lock = false)
    {
        parent::put($path, $contents, $lock = false);

        Event::dispatch('package.files: $path', $content);
    }
}

我需要一种在生成器 classes

中收听 File::put 的方法

所以也对其他方法持开放态度..这是我想到的最好的方法。

不理想但有效:

$files = $this->app['files'];

$this->app->beforeResolving('command.controller.make', function ($abstract, $parameters, $container) {
    $container->bind('files', function() {
        return new Override;
    });
});

$this->app->afterResolving('command.controller.make', function ($command, $container) use($files) {
    $container->bind('files', function() use($files) {
        return $files;
    });
});