From aa6a21fb7905db6748c5797e587f4eb97dee843b Mon Sep 17 00:00:00 2001 From: antonkomarev Date: Sat, 25 Apr 2020 01:27:01 +0300 Subject: [PATCH 1/5] Allow dependencies to be injected into migrations constructor --- .../Database/MigrationServiceProvider.php | 2 +- src/Illuminate/Database/Migrations/Migrator.php | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Illuminate/Database/MigrationServiceProvider.php b/src/Illuminate/Database/MigrationServiceProvider.php index 779e19fdc120..8bb7923c6176 100755 --- a/src/Illuminate/Database/MigrationServiceProvider.php +++ b/src/Illuminate/Database/MigrationServiceProvider.php @@ -78,7 +78,7 @@ protected function registerMigrator() $this->app->singleton('migrator', function ($app) { $repository = $app['migration.repository']; - return new Migrator($repository, $app['db'], $app['files'], $app['events']); + return new Migrator($app, $repository, $app['db'], $app['files'], $app['events']); }); } diff --git a/src/Illuminate/Database/Migrations/Migrator.php b/src/Illuminate/Database/Migrations/Migrator.php index d3dab9db9472..5c812d0c2c7a 100755 --- a/src/Illuminate/Database/Migrations/Migrator.php +++ b/src/Illuminate/Database/Migrations/Migrator.php @@ -3,6 +3,7 @@ namespace Illuminate\Database\Migrations; use Illuminate\Collections\Arr; +use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Database\ConnectionResolverInterface as Resolver; use Illuminate\Database\Events\MigrationEnded; @@ -17,6 +18,13 @@ class Migrator { + /** + * The container implementation. + * + * @var \Illuminate\Contracts\Container\Container + */ + protected $container; + /** * The event dispatcher instance. * @@ -69,17 +77,20 @@ class Migrator /** * Create a new migrator instance. * + * @param \Illuminate\Contracts\Container\Container $container * @param \Illuminate\Database\Migrations\MigrationRepositoryInterface $repository * @param \Illuminate\Database\ConnectionResolverInterface $resolver * @param \Illuminate\Filesystem\Filesystem $files * @param \Illuminate\Contracts\Events\Dispatcher|null $dispatcher * @return void */ - public function __construct(MigrationRepositoryInterface $repository, + public function __construct(Container $container, + MigrationRepositoryInterface $repository, Resolver $resolver, Filesystem $files, Dispatcher $dispatcher = null) { + $this->container = $container; $this->files = $files; $this->events = $dispatcher; $this->resolver = $resolver; @@ -450,7 +461,7 @@ public function resolve($file) { $class = Str::studly(implode('_', array_slice(explode('_', $file), 4))); - return new $class; + return $this->container->make($class); } /** From e5ff78756273b6a66b9f20200543c1c244c5cc75 Mon Sep 17 00:00:00 2001 From: antonkomarev Date: Sat, 25 Apr 2020 01:33:31 +0300 Subject: [PATCH 2/5] Fix tests --- tests/Database/DatabaseMigratorIntegrationTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Database/DatabaseMigratorIntegrationTest.php b/tests/Database/DatabaseMigratorIntegrationTest.php index 3ee9815cadcf..3eab55849131 100644 --- a/tests/Database/DatabaseMigratorIntegrationTest.php +++ b/tests/Database/DatabaseMigratorIntegrationTest.php @@ -45,6 +45,7 @@ protected function setUp(): void Facade::setFacadeApplication($container); $this->migrator = new Migrator( + $container, $repository = new DatabaseMigrationRepository($db->getDatabaseManager(), 'migrations'), $db->getDatabaseManager(), new Filesystem From 09aea67fe8f04f3c0d7db20ca1692b0122028db9 Mon Sep 17 00:00:00 2001 From: antonkomarev Date: Sat, 25 Apr 2020 12:17:00 +0300 Subject: [PATCH 3/5] Allow container to be null --- .../Database/MigrationServiceProvider.php | 2 +- src/Illuminate/Database/Migrations/Migrator.php | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Illuminate/Database/MigrationServiceProvider.php b/src/Illuminate/Database/MigrationServiceProvider.php index 8bb7923c6176..5c709acb0ebc 100755 --- a/src/Illuminate/Database/MigrationServiceProvider.php +++ b/src/Illuminate/Database/MigrationServiceProvider.php @@ -78,7 +78,7 @@ protected function registerMigrator() $this->app->singleton('migrator', function ($app) { $repository = $app['migration.repository']; - return new Migrator($app, $repository, $app['db'], $app['files'], $app['events']); + return new Migrator($repository, $app['db'], $app['files'], $app['events'], $app); }); } diff --git a/src/Illuminate/Database/Migrations/Migrator.php b/src/Illuminate/Database/Migrations/Migrator.php index 5c812d0c2c7a..fe715ac6f035 100755 --- a/src/Illuminate/Database/Migrations/Migrator.php +++ b/src/Illuminate/Database/Migrations/Migrator.php @@ -21,7 +21,7 @@ class Migrator /** * The container implementation. * - * @var \Illuminate\Contracts\Container\Container + * @var \Illuminate\Contracts\Container\Container|null */ protected $container; @@ -77,24 +77,24 @@ class Migrator /** * Create a new migrator instance. * - * @param \Illuminate\Contracts\Container\Container $container * @param \Illuminate\Database\Migrations\MigrationRepositoryInterface $repository * @param \Illuminate\Database\ConnectionResolverInterface $resolver * @param \Illuminate\Filesystem\Filesystem $files * @param \Illuminate\Contracts\Events\Dispatcher|null $dispatcher + * @param \Illuminate\Contracts\Container\Container|null $container * @return void */ - public function __construct(Container $container, - MigrationRepositoryInterface $repository, + public function __construct(MigrationRepositoryInterface $repository, Resolver $resolver, Filesystem $files, - Dispatcher $dispatcher = null) + Dispatcher $dispatcher = null, + ?Container $container = null) { - $this->container = $container; $this->files = $files; $this->events = $dispatcher; $this->resolver = $resolver; $this->repository = $repository; + $this->container = $container; } /** @@ -461,6 +461,10 @@ public function resolve($file) { $class = Str::studly(implode('_', array_slice(explode('_', $file), 4))); + if (is_null($this->container)) { + return new $class; + } + return $this->container->make($class); } From c55084e4be463c5e5300f693abf7811bf4356ae0 Mon Sep 17 00:00:00 2001 From: antonkomarev Date: Sat, 25 Apr 2020 12:18:46 +0300 Subject: [PATCH 4/5] Fix tests --- tests/Database/DatabaseMigratorIntegrationTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Database/DatabaseMigratorIntegrationTest.php b/tests/Database/DatabaseMigratorIntegrationTest.php index 3eab55849131..3ee9815cadcf 100644 --- a/tests/Database/DatabaseMigratorIntegrationTest.php +++ b/tests/Database/DatabaseMigratorIntegrationTest.php @@ -45,7 +45,6 @@ protected function setUp(): void Facade::setFacadeApplication($container); $this->migrator = new Migrator( - $container, $repository = new DatabaseMigrationRepository($db->getDatabaseManager(), 'migrations'), $db->getDatabaseManager(), new Filesystem From c474e9e7162fc953d310e7b8a53e19de26d0f408 Mon Sep 17 00:00:00 2001 From: antonkomarev Date: Sat, 25 Apr 2020 13:17:21 +0300 Subject: [PATCH 5/5] Reorder class properties --- .../Database/Migrations/Migrator.php | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Illuminate/Database/Migrations/Migrator.php b/src/Illuminate/Database/Migrations/Migrator.php index fe715ac6f035..2ea263b71dca 100755 --- a/src/Illuminate/Database/Migrations/Migrator.php +++ b/src/Illuminate/Database/Migrations/Migrator.php @@ -19,39 +19,39 @@ class Migrator { /** - * The container implementation. + * The migration repository implementation. * - * @var \Illuminate\Contracts\Container\Container|null + * @var \Illuminate\Database\Migrations\MigrationRepositoryInterface */ - protected $container; + protected $repository; /** - * The event dispatcher instance. + * The connection resolver instance. * - * @var \Illuminate\Contracts\Events\Dispatcher + * @var \Illuminate\Database\ConnectionResolverInterface */ - protected $events; + protected $resolver; /** - * The migration repository implementation. + * The filesystem instance. * - * @var \Illuminate\Database\Migrations\MigrationRepositoryInterface + * @var \Illuminate\Filesystem\Filesystem */ - protected $repository; + protected $files; /** - * The filesystem instance. + * The event dispatcher instance. * - * @var \Illuminate\Filesystem\Filesystem + * @var \Illuminate\Contracts\Events\Dispatcher */ - protected $files; + protected $events; /** - * The connection resolver instance. + * The container implementation. * - * @var \Illuminate\Database\ConnectionResolverInterface + * @var \Illuminate\Contracts\Container\Container|null */ - protected $resolver; + protected $container; /** * The name of the default connection. @@ -88,12 +88,12 @@ public function __construct(MigrationRepositoryInterface $repository, Resolver $resolver, Filesystem $files, Dispatcher $dispatcher = null, - ?Container $container = null) + Container $container = null) { + $this->repository = $repository; + $this->resolver = $resolver; $this->files = $files; $this->events = $dispatcher; - $this->resolver = $resolver; - $this->repository = $repository; $this->container = $container; }