相关疑难解决方法(0)

在Laravel容器中覆盖Singleton

我想知道是否有一种简单的方法来覆盖Laravel框架核心中的单件服务集?

例如,我正在尝试使用以下提供程序重写app:name命令服务'':

use Hexavel\Console\AppNameCommand;
use Illuminate\Console\Events\ArtisanStarting;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Support\ServiceProvider;

class NameCommandProvider extends ServiceProvider
{
    /**
     * Register any other events for your application.
     *
     * @param  \Illuminate\Contracts\Events\Dispatcher  $events
     * @return void
     */
    public function boot(Dispatcher $events)
    {
        $events->listen(ArtisanStarting::class, function ($event) {
            $event->artisan->resolve('command.app.name');
        }, -1);
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('command.app.name', function ($app) {
            return new AppNameCommand($app['composer'], $app['files']);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我100%一切都在工作,因为无论我把服务提供商放在什么顺序(上面或下面的ConsoleSupportServiceProvider),它仍会加载原始的AppNameCommand而不是我自定义的一个.

我已经有了一个解决方案,但如果可能的话,了解未来单身人士服务的行为会很好吗?(这是使用Laravel 5.2,如果这有任何区别.)

php laravel laravel-5 artisan laravel-5.2

12
推荐指数
2
解决办法
4522
查看次数

标签 统计

artisan ×1

laravel ×1

laravel-5 ×1

laravel-5.2 ×1

php ×1