Auto generate models (#1163)

* Add illuminate/events as suggestion

* Add post migration to config

* Add listener to generate model helper

* Add event listeners if enabled

* Fix config file format

* Add docblock for shouldRun flag

* Allow running multiple commands after migrations

* Simplify config

* Change default value
This commit is contained in:
netpok
2021-03-15 18:57:20 +01:00
committed by GitHub
parent c5c9b2b951
commit 202395b50f
4 changed files with 77 additions and 0 deletions
+3
View File
@@ -42,6 +42,9 @@
"spatie/phpunit-snapshot-assertions": "^3 || ^4", "spatie/phpunit-snapshot-assertions": "^3 || ^4",
"vimeo/psalm": "^3.12" "vimeo/psalm": "^3.12"
}, },
"suggest": {
"illuminate/events": "Required for automatic helper generation (^6|^7|^8)."
},
"config": { "config": {
"sort-packages": true "sort-packages": true
}, },
+12
View File
@@ -278,4 +278,16 @@ return [
*/ */
'additional_relation_types' => [], 'additional_relation_types' => [],
/*
|--------------------------------------------------------------------------
| Run artisan commands after migrations to generate model helpers
|--------------------------------------------------------------------------
|
| The specified commands should run after migrations are finished running.
|
*/
'post_migrate' => [
// 'ide-helper:models --nowrite',
],
]; ];
+10
View File
@@ -15,7 +15,10 @@ use Barryvdh\LaravelIdeHelper\Console\EloquentCommand;
use Barryvdh\LaravelIdeHelper\Console\GeneratorCommand; use Barryvdh\LaravelIdeHelper\Console\GeneratorCommand;
use Barryvdh\LaravelIdeHelper\Console\MetaCommand; use Barryvdh\LaravelIdeHelper\Console\MetaCommand;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand; use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Listeners\GenerateModelHelper;
use Illuminate\Console\Events\CommandFinished;
use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Contracts\Support\DeferrableProvider;
use Illuminate\Database\Events\MigrationsEnded;
use Illuminate\Foundation\Application; use Illuminate\Foundation\Application;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Illuminate\View\Engines\EngineResolver; use Illuminate\View\Engines\EngineResolver;
@@ -32,6 +35,13 @@ class IdeHelperServiceProvider extends ServiceProvider implements DeferrableProv
*/ */
public function boot() public function boot()
{ {
if ($this->app['config']->get('ide-helper.post_migrate', [])) {
$this->app['events']->listen(CommandFinished::class, GenerateModelHelper::class);
$this->app['events']->listen(MigrationsEnded::class, function () {
GenerateModelHelper::$shouldRun = true;
});
}
if ($this->app->has('view')) { if ($this->app->has('view')) {
$viewPath = __DIR__ . '/../resources/views'; $viewPath = __DIR__ . '/../resources/views';
$this->loadViewsFrom($viewPath, 'ide-helper'); $this->loadViewsFrom($viewPath, 'ide-helper');
+52
View File
@@ -0,0 +1,52 @@
<?php
namespace Barryvdh\LaravelIdeHelper\Listeners;
use Illuminate\Console\Events\CommandFinished;
use Illuminate\Contracts\Config\Repository as Config;
use Illuminate\Contracts\Console\Kernel as Artisan;
class GenerateModelHelper
{
/**
* Tracks whether we should run the models command on the CommandFinished event or not.
* Set to true by the MigrationsEnded event, needs to be cleared before artisan call to prevent infinite loop.
*
* @var bool
*/
public static $shouldRun = false;
/** @var \Illuminate\Contracts\Console\Kernel */
protected $artisan;
/** @var \Illuminate\Contracts\Config\Repository */
protected $config;
/**
* @param \Illuminate\Contracts\Console\Kernel $artisan
* @param \Illuminate\Contracts\Config\Repository $config
*/
public function __construct(Artisan $artisan, Config $config)
{
$this->artisan = $artisan;
$this->config = $config;
}
/**
* Handle the event.
*
* @param CommandFinished $event
*/
public function handle(CommandFinished $event)
{
if (!self::$shouldRun) {
return;
}
self::$shouldRun = false;
foreach ($this->config->get('ide-helper.post_migrate', []) as $command) {
$this->artisan->call($command, [], $event->output);
}
}
}