如何为 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;
});
});
在 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;
});
});