-
Notifications
You must be signed in to change notification settings - Fork 13
/
ConsoleServiceProvider.php
134 lines (121 loc) · 3.72 KB
/
ConsoleServiceProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
namespace Orchestra\Database;
use Illuminate\Contracts\Container\Container;
use Illuminate\Contracts\Support\DeferrableProvider;
use Illuminate\Support\ServiceProvider;
use Orchestra\Database\Console\Migrations\FreshCommand;
use Orchestra\Database\Console\Migrations\MigrateCommand;
use Orchestra\Database\Console\Migrations\RefreshCommand;
use Orchestra\Database\Console\Migrations\ResetCommand;
use Orchestra\Database\Console\Migrations\RollbackCommand;
class ConsoleServiceProvider extends ServiceProvider implements DeferrableProvider
{
/**
* Register all of the migration commands.
*
* @return void
*/
public function register()
{
$commands = ['Migrate', 'Fresh', 'Rollback', 'Reset', 'Refresh'];
// We'll simply spin through the list of commands that are migration related
// and register each one of them with an application container. They will
// be resolved in the Artisan start file and registered on the console.
foreach ($commands as $command) {
$this->{'register'.$command.'Command'}();
}
// Once the commands are registered in the application IoC container we will
// register them with the Artisan start event so that these are available
// when the Artisan application actually starts up and is getting used.
$this->commands(
'command.migrate',
'command.migrate.fresh',
'command.migrate.rollback',
'command.migrate.reset',
'command.migrate.refresh'
);
}
/**
* Register the command.
*
* @return void
*/
protected function registerFreshCommand()
{
$this->app->singleton('command.migrate.fresh', static function () {
return new FreshCommand();
});
}
/**
* Register the "migrate" migration command.
*
* @return void
*/
protected function registerMigrateCommand()
{
$this->app->singleton('command.migrate', function (Container $app) {
return $this->getCommandWithPackage(
new MigrateCommand($app->make('migrator'), $app->make('events'))
);
});
}
/**
* Register the "rollback" migration command.
*
* @return void
*/
protected function registerRollbackCommand()
{
$this->app->singleton('command.migrate.rollback', function (Container $app) {
return $this->getCommandWithPackage(new RollbackCommand($app->make('migrator')));
});
}
/**
* Register the "reset" migration command.
*
* @return void
*/
protected function registerResetCommand()
{
$this->app->singleton('command.migrate.reset', function (Container $app) {
return $this->getCommandWithPackage(new ResetCommand($app->make('migrator')));
});
}
/**
* Register the "refresh" migration command.
*
* @return void
*/
protected function registerRefreshCommand()
{
$this->app->singleton('command.migrate.refresh', static function () {
return new RefreshCommand();
});
}
/**
* Set package path for command.
*
* @param object $command
*
* @return object
*/
protected function getCommandWithPackage($command)
{
$packagePath = $this->app->basePath().'/vendor';
return $command->setPackagePath($packagePath);
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return [
'command.migrate',
'command.migrate.rollback',
'command.migrate.reset',
'command.migrate.refresh',
];
}
}