Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Foundation/Console/ModelMakeCommand.php
Строк: 289
<?php

namespace IlluminateFoundationConsole;

use 
IlluminateConsoleConcernsCreatesMatchingTest;
use 
IlluminateConsoleGeneratorCommand;
use 
IlluminateSupportStr;
use 
SymfonyComponentConsoleAttributeAsCommand;
use 
SymfonyComponentConsoleInputInputInterface;
use 
SymfonyComponentConsoleInputInputOption;
use 
SymfonyComponentConsoleOutputOutputInterface;

use function 
LaravelPromptsmultiselect;

#[AsCommand(name: 'make:model')]
class ModelMakeCommand extends GeneratorCommand
{
    use 
CreatesMatchingTest;

    
/**
     * The console command name.
     *
     * @var string
     */
    
protected $name = 'make:model';

    
/**
     * The console command description.
     *
     * @var string
     */
    
protected $description = 'Create a new Eloquent model class';

    
/**
     * The type of class being generated.
     *
     * @var string
     */
    
protected $type = 'Model';

    
/**
     * Execute the console command.
     *
     * @return void
     */
    
public function handle()
    {
        if (
parent::handle() === false && ! $this->option('force')) {
            return 
false;
        }

        if (
$this->option('all')) {
            
$this->input->setOption('factory', true);
            
$this->input->setOption('seed', true);
            
$this->input->setOption('migration', true);
            
$this->input->setOption('controller', true);
            
$this->input->setOption('policy', true);
            
$this->input->setOption('resource', true);
        }

        if (
$this->option('factory')) {
            
$this->createFactory();
        }

        if (
$this->option('migration')) {
            
$this->createMigration();
        }

        if (
$this->option('seed')) {
            
$this->createSeeder();
        }

        if (
$this->option('controller') || $this->option('resource') || $this->option('api')) {
            
$this->createController();
        }

        if (
$this->option('policy')) {
            
$this->createPolicy();
        }
    }

    
/**
     * Create a model factory for the model.
     *
     * @return void
     */
    
protected function createFactory()
    {
        
$factory = Str::studly($this->argument('name'));

        
$this->call('make:factory', [
            
'name' => "{$factory}Factory",
            
'--model' => $this->qualifyClass($this->getNameInput()),
        ]);
    }

    
/**
     * Create a migration file for the model.
     *
     * @return void
     */
    
protected function createMigration()
    {
        
$table = Str::snake(Str::pluralStudly(class_basename($this->argument('name'))));

        if (
$this->option('pivot')) {
            
$table = Str::singular($table);
        }

        
$this->call('make:migration', [
            
'name' => "create_{$table}_table",
            
'--create' => $table,
        ]);
    }

    
/**
     * Create a seeder file for the model.
     *
     * @return void
     */
    
protected function createSeeder()
    {
        
$seeder = Str::studly(class_basename($this->argument('name')));

        
$this->call('make:seeder', [
            
'name' => "{$seeder}Seeder",
        ]);
    }

    
/**
     * Create a controller for the model.
     *
     * @return void
     */
    
protected function createController()
    {
        
$controller = Str::studly(class_basename($this->argument('name')));

        
$modelName = $this->qualifyClass($this->getNameInput());

        
$this->call('make:controller', array_filter([
            
'name' => "{$controller}Controller",
            
'--model' => $this->option('resource') || $this->option('api') ? $modelName : null,
            
'--api' => $this->option('api'),
            
'--requests' => $this->option('requests') || $this->option('all'),
            
'--test' => $this->option('test'),
            
'--pest' => $this->option('pest'),
        ]));
    }

    
/**
     * Create a policy file for the model.
     *
     * @return void
     */
    
protected function createPolicy()
    {
        
$policy = Str::studly(class_basename($this->argument('name')));

        
$this->call('make:policy', [
            
'name' => "{$policy}Policy",
            
'--model' => $this->qualifyClass($this->getNameInput()),
        ]);
    }

    
/**
     * Get the stub file for the generator.
     *
     * @return string
     */
    
protected function getStub()
    {
        if (
$this->option('pivot')) {
            return 
$this->resolveStubPath('/stubs/model.pivot.stub');
        }

        if (
$this->option('morph-pivot')) {
            return 
$this->resolveStubPath('/stubs/model.morph-pivot.stub');
        }

        return 
$this->resolveStubPath('/stubs/model.stub');
    }

    
/**
     * Resolve the fully-qualified path to the stub.
     *
     * @param  string  $stub
     * @return string
     */
    
protected function resolveStubPath($stub)
    {
        return 
file_exists($customPath = $this->laravel->basePath(trim($stub, '/')))
                        ? 
$customPath
                        
: __DIR__.$stub;
    }

    
/**
     * Get the default namespace for the class.
     *
     * @param  string  $rootNamespace
     * @return string
     */
    
protected function getDefaultNamespace($rootNamespace)
    {
        return 
is_dir(app_path('Models')) ? $rootNamespace.'\Models' : $rootNamespace;
    }

    
/**
     * Get the console command options.
     *
     * @return array
     */
    
protected function getOptions()
    {
        return [
            [
'all', 'a', InputOption::VALUE_NONE, 'Generate a migration, seeder, factory, policy, resource controller, and form request classes for the model'],
            [
'controller', 'c', InputOption::VALUE_NONE, 'Create a new controller for the model'],
            [
'factory', 'f', InputOption::VALUE_NONE, 'Create a new factory for the model'],
            [
'force', null, InputOption::VALUE_NONE, 'Create the class even if the model already exists'],
            [
'migration', 'm', InputOption::VALUE_NONE, 'Create a new migration file for the model'],
            [
'morph-pivot', null, InputOption::VALUE_NONE, 'Indicates if the generated model should be a custom polymorphic intermediate table model'],
            [
'policy', null, InputOption::VALUE_NONE, 'Create a new policy for the model'],
            [
'seed', 's', InputOption::VALUE_NONE, 'Create a new seeder for the model'],
            [
'pivot', 'p', InputOption::VALUE_NONE, 'Indicates if the generated model should be a custom intermediate table model'],
            [
'resource', 'r', InputOption::VALUE_NONE, 'Indicates if the generated controller should be a resource controller'],
            [
'api', null, InputOption::VALUE_NONE, 'Indicates if the generated controller should be an API resource controller'],
            [
'requests', 'R', InputOption::VALUE_NONE, 'Create new form request classes and use them in the resource controller'],
        ];
    }

    
/**
     * Interact further with the user if they were prompted for missing arguments.
     *
     * @param  SymfonyComponentConsoleInputInputInterface  $input
     * @param  SymfonyComponentConsoleOutputOutputInterface  $output
     * @return void
     */
    
protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output)
    {
        if (
$this->isReservedName($this->getNameInput()) || $this->didReceiveOptions($input)) {
            return;
        }

        
collect(multiselect('Would you like any of the following?', [
            
'seed' => 'Database Seeder',
            
'factory' => 'Factory',
            
'requests' => 'Form Requests',
            
'migration' => 'Migration',
            
'policy' => 'Policy',
            
'resource' => 'Resource Controller',
        ]))->
each(fn ($option) => $input->setOption($option, true));
    }
}
Онлайн: 2
Реклама