mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-17 17:47:13 +00:00
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:
@@ -42,6 +42,9 @@
|
||||
"spatie/phpunit-snapshot-assertions": "^3 || ^4",
|
||||
"vimeo/psalm": "^3.12"
|
||||
},
|
||||
"suggest": {
|
||||
"illuminate/events": "Required for automatic helper generation (^6|^7|^8)."
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
},
|
||||
|
||||
@@ -278,4 +278,16 @@ return [
|
||||
*/
|
||||
'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',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -15,7 +15,10 @@ use Barryvdh\LaravelIdeHelper\Console\EloquentCommand;
|
||||
use Barryvdh\LaravelIdeHelper\Console\GeneratorCommand;
|
||||
use Barryvdh\LaravelIdeHelper\Console\MetaCommand;
|
||||
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
|
||||
use Barryvdh\LaravelIdeHelper\Listeners\GenerateModelHelper;
|
||||
use Illuminate\Console\Events\CommandFinished;
|
||||
use Illuminate\Contracts\Support\DeferrableProvider;
|
||||
use Illuminate\Database\Events\MigrationsEnded;
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Illuminate\View\Engines\EngineResolver;
|
||||
@@ -32,6 +35,13 @@ class IdeHelperServiceProvider extends ServiceProvider implements DeferrableProv
|
||||
*/
|
||||
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')) {
|
||||
$viewPath = __DIR__ . '/../resources/views';
|
||||
$this->loadViewsFrom($viewPath, 'ide-helper');
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user