mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 01:57:13 +00:00
Add option for only eloquent (#1636)
* Add option for only eloquent * composer fix-style * Add snapshot * Add option to models command * composer fix-style * Fix namespace --------- Co-authored-by: laravel-ide-helper <[email protected]>
This commit is contained in:
co-authored by
laravel-ide-helper
parent
14fdb572bb
commit
347483be03
@@ -113,7 +113,12 @@ class GeneratorCommand extends Command
|
||||
}
|
||||
|
||||
$generator = new Generator($this->config, $this->view, $this->getOutput(), $helpers);
|
||||
$content = $generator->generate();
|
||||
if ($this->option('eloquent')) {
|
||||
$content = $generator->generateEloquent();
|
||||
} else {
|
||||
$content = $generator->generate();
|
||||
}
|
||||
|
||||
$written = $this->files->put($filename, $content);
|
||||
|
||||
if ($written !== false) {
|
||||
@@ -169,6 +174,7 @@ class GeneratorCommand extends Command
|
||||
['write_mixins', 'W', InputOption::VALUE_OPTIONAL, 'Write mixins to Laravel Model?', $writeMixins],
|
||||
['helpers', 'H', InputOption::VALUE_NONE, 'Include the helper files'],
|
||||
['memory', 'M', InputOption::VALUE_NONE, 'Use sqlite memory driver'],
|
||||
['eloquent', 'E', InputOption::VALUE_NONE, 'Only write Eloquent methods'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
namespace Barryvdh\LaravelIdeHelper\Console;
|
||||
|
||||
use Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface;
|
||||
use Barryvdh\LaravelIdeHelper\Generator;
|
||||
use Barryvdh\LaravelIdeHelper\Parsers\PhpDocReturnTypeParser;
|
||||
use Barryvdh\Reflection\DocBlock;
|
||||
use Barryvdh\Reflection\DocBlock\Context;
|
||||
@@ -19,6 +20,7 @@ use Barryvdh\Reflection\DocBlock\Serializer as DocBlockSerializer;
|
||||
use Barryvdh\Reflection\DocBlock\Tag;
|
||||
use Composer\ClassMapGenerator\ClassMapGenerator;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Contracts\Config\Repository;
|
||||
use Illuminate\Contracts\Database\Eloquent\Castable;
|
||||
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
|
||||
use Illuminate\Contracts\Database\Eloquent\CastsInboundAttributes;
|
||||
@@ -46,6 +48,7 @@ use Illuminate\Filesystem\Filesystem;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\View\Factory as ViewFactory;
|
||||
use phpDocumentor\Reflection\Types\ContextFactory;
|
||||
use ReflectionClass;
|
||||
use ReflectionNamedType;
|
||||
@@ -82,6 +85,14 @@ class ModelsCommand extends Command
|
||||
*/
|
||||
protected $files;
|
||||
|
||||
/**
|
||||
* @var Repository
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/** @var ViewFactory */
|
||||
protected $view;
|
||||
|
||||
/**
|
||||
* The console command name.
|
||||
*
|
||||
@@ -131,10 +142,12 @@ class ModelsCommand extends Command
|
||||
/**
|
||||
* @param Filesystem $files
|
||||
*/
|
||||
public function __construct(Filesystem $files)
|
||||
public function __construct(Filesystem $files, Repository $config, ViewFactory $view)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->config = $config;
|
||||
$this->files = $files;
|
||||
$this->view = $view;
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -187,6 +200,27 @@ class ModelsCommand extends Command
|
||||
$this->error("Failed to write model information to $filename");
|
||||
}
|
||||
}
|
||||
|
||||
$helperFilename = $this->config->get('ide-helper.filename');
|
||||
$writeHelper = $this->option('write-eloquent-helper');
|
||||
|
||||
if (!$writeHelper && !$this->files->exists($helperFilename) && ($this->write || $this->write_mixin)) {
|
||||
if ($this->confirm("{$helperFilename} does not exist.
|
||||
Do you want to generate a minimal helper to generate the Eloquent methods?")) {
|
||||
$writeHelper = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($writeHelper) {
|
||||
$generator = new Generator($this->config, $this->view, $this->getOutput());
|
||||
$content = $generator->generateEloquent();
|
||||
$written = $this->files->put($helperFilename, $content);
|
||||
if ($written !== false) {
|
||||
$this->info("Eloquent helper was written to $helperFilename");
|
||||
} else {
|
||||
$this->error("Failed to write eloquent helper to $helperFilename");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -217,6 +251,9 @@ class ModelsCommand extends Command
|
||||
['write-mixin', 'M', InputOption::VALUE_NONE,
|
||||
"Write models to {$this->filename} and adds @mixin to each model, avoiding IDE duplicate declaration warnings",
|
||||
],
|
||||
['write-eloquent-helper', 'E', InputOption::VALUE_NONE,
|
||||
'Write Eloquent helper file to _ide_helper.php',
|
||||
],
|
||||
['nowrite', 'N', InputOption::VALUE_NONE, 'Don\'t write to Model file'],
|
||||
['reset', 'R', InputOption::VALUE_NONE, 'Remove the original phpdocs instead of appending'],
|
||||
['smart-reset', 'r', InputOption::VALUE_NONE, 'Retained for compatibility, while it no longer has any effect'],
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
namespace Barryvdh\LaravelIdeHelper;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Foundation\AliasLoader;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
@@ -89,6 +90,33 @@ class Generator
|
||||
->render();
|
||||
}
|
||||
|
||||
public function generateEloquent()
|
||||
{
|
||||
$name = 'Eloquent';
|
||||
$facade = Model::class;
|
||||
$magicMethods = array_key_exists($name, $this->magic) ? $this->magic[$name] : [];
|
||||
$alias = new Alias($this->config, $name, $facade, $magicMethods, $this->interfaces);
|
||||
if ($alias->isValid()) {
|
||||
//Add extra methods, from other classes (magic static calls)
|
||||
if (array_key_exists($name, $this->extra)) {
|
||||
$alias->addClass($this->extra[$name]);
|
||||
}
|
||||
|
||||
$eloquentAliases['__root'] = [$alias];
|
||||
}
|
||||
|
||||
$app = app();
|
||||
return $this->view->make('helper')
|
||||
->with('namespaces_by_extends_ns', [])
|
||||
->with('namespaces_by_alias_ns', $eloquentAliases)
|
||||
->with('real_time_facades', [])
|
||||
->with('helpers', '')
|
||||
->with('version', $app->version())
|
||||
->with('include_fluent', false)
|
||||
->with('factories', [])
|
||||
->render();
|
||||
}
|
||||
|
||||
protected function detectDrivers()
|
||||
{
|
||||
$defaultUserModel = config('auth.providers.users.model', config('auth.model', 'App\User'));
|
||||
|
||||
@@ -65,7 +65,7 @@ class IdeHelperServiceProvider extends ServiceProvider implements DeferrableProv
|
||||
$configPath = __DIR__ . '/../config/ide-helper.php';
|
||||
$this->mergeConfigFrom($configPath, 'ide-helper');
|
||||
|
||||
$this->app->when([GeneratorCommand::class, MetaCommand::class])
|
||||
$this->app->when([GeneratorCommand::class, MetaCommand::class, ModelsCommand::class])
|
||||
->needs(\Illuminate\Contracts\View\Factory::class)
|
||||
->give(function () {
|
||||
return $this->createLocalViewFactory();
|
||||
|
||||
Reference in New Issue
Block a user