laravel - 依赖注入(inject)在 Laravel 5.2 的迁移文件中不起作用

标签 laravel laravel-5 laravel-5.2

我正在尝试将单例用于特定类。

我在“AppServicePrvider.php”中使用以下内容简单地做到了这一点:

<?php

namespace App\Providers;

use App\Helpers\ApplicationFormHelper;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {

    }

    public function register()
    {
        $this->app->singleton(ApplicationFormHelper::class, function ($app) {
            return new ApplicationFormHelper();
        });
    }
}

然后我将这个类包含在我的迁移文件中,如下所示:
<?php

use App\Helpers\ApplicationFormHelper;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    private $applicationFormHelper;

    public function __construct(ApplicationFormHelper $applicationFormHelper)
    {
        $this->applicationFormHelper = $applicationFormHelper;
    }

    public function up()
    {
        //...
    }

    public function down()
    {
        Schema::drop('users');
    }
}

但是,当我执行 php artisan migrate我收到以下错误,表明依赖注入(inject)不起作用。
 [Symfony\Component\Debug\Exception\FatalThrowableError]                                                             
  Type error: Argument 1 passed to CreateUsersTable::__construct() must be an instance of App\Helpers\ApplicationFor  
  mHelper, none given, called in /home/vagrant/saroia/vendor/laravel/framework/src/Illuminate/Database/Migrations/Mi  
  grator.php on line 335   

请注意,我在其他地方(例如在路由文件中)使用了这个类,没有问题。似乎仅在迁移文件中存在此问题!

最佳答案

正如@lagbox 所提到的,IoC 容器似乎无法解析迁移文件。

但是,仍然可以使用 app make 方法解决它们,如下所示:

<?php

use App\Helpers\ApplicationFormHelper;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    private $applicationFormHelper;

    public function __construct()
    {
        $this->applicationFormHelper = app(ApplicationFormHelper::class);
    }

    public function up()
    {
        //...
    }

    public function down()
    {
        Schema::drop('users');
    }
}

关于laravel - 依赖注入(inject)在 Laravel 5.2 的迁移文件中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38214579/

相关文章:

php - 使用 https 找不到 Laravel 路由

html - 如何在 Laravel 5.4 中将数据库值传递给 CSS 文件

Laravel 与复合非标准外键的关系

php - 将 API 上传到 DigitalOcean 液滴端口上的端口

php - 事件提要的 Laravel Eloquent Combine 查询

laravel-5 - 如何在 Laravel 5.1 中使用旧输入重新填充 Dropzone Div

php - laravel 5.2 : ErrorException: preg_replace(): Parameter mismatch, 模式是一个字符串,而替换是一个数组

Laravel IronMQ 类未找到异常

php - Laravel 中未定义路由 [signup]

php - Laravel多个sql选择到AS