我正在尝试将单例用于特定类。
我在“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/