php - 将 Artisan 注入(inject) Service 类

标签 php laravel laravel-5 laravel-artisan laravel-facade

我正在尝试将 Artisan 注入(inject)到服务中,这样我就可以避免使用外观。 查看外观类引用,我可以看到我应该注入(inject)的类是:

Illuminate\Console\Application

所以我假设这样做:

<?php

namespace App\Service;

use Illuminate\Console\Application;

class DummyDataService
{
    /**
     * @var Application
     */
    private $application;

    public function __construct(
        Application $application
    ) {
        $this->application = $application;
    }

    public function insertDummyData()
    {
        $this->application->call('db:seed', [
            '--class' => 'DummyDataSeeder'
        ]);
    }
}

...会起作用。但是,我收到以下错误:

BindingResolutionException in Container.php line 824:
Unresolvable dependency resolving [Parameter #2 [ <required> $version ]] in class Illuminate\Console\Application

如果我像这样调用外观上的方法,它就会起作用:

Artisan::call('db:seed', [
    '--class' => 'DummyDataSeeder'
]);

到目前为止我还无法弄清楚问题出在哪里。有没有人遇到过类似的问题?我尽量避免使用正面。

提前致谢。

最佳答案

您应该注入(inject) Illuminate\Console\Kernel 而不是 Illuminate\Console\Application 来实现您想要的,因此您的类应如下所示:

<?php

namespace App\Service;

use Illuminate\Contracts\Console\Kernel;

class DummyDataService
{
    private $kernel;

    public function __construct(Kernel $kernel) 
    {
        $this->kernel = $kernel;
    }

    public function insertDummyData()
    {
        $this->kernel->call('db:seed', [
            '--class' => 'DummyDataSeeder'
        ]);
    }
}

关于php - 将 Artisan 注入(inject) Service 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33875166/

相关文章:

javascript - 如何使用 Jquery 获取 pickadate 值?

php - 尝试删除表行 laravel

php - 无法访问 Laravel 中的存储文件夹

php - 如何在叠加 HTML - CSS 中显示模态/面板

php - PHP将PDO对象传递给类

php - UsersModel::myFunc()的返回值必须是字符串类型,返回对象

php - Laravel 分页将数据附加到一个变量中,并将其他数据附加到另一个变量中

php - 了解 PHP 事件调度系统

laravel - 如何在 laravel eloquent 中选择特定列

php - 为每次注册创建一个新数据库,是否有可能 Laravel 5