Viewing file: ModelMakeCommand.php (4.9 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Akaunting\Module\Commands;
use Illuminate\Support\Str; use Akaunting\Module\Support\Config\GenerateConfigReader; use Akaunting\Module\Support\Stub; use Akaunting\Module\Traits\ModuleCommandTrait; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption;
class ModelMakeCommand extends GeneratorCommand { use ModuleCommandTrait;
/** * The name of argument name. * * @var string */ protected $argumentName = 'model';
/** * The console command name. * * @var string */ protected $name = 'module:make-model';
/** * The console command description. * * @var string */ protected $description = 'Create a new model for the specified module.';
public function handle() { parent::handle();
$this->handleOptionalMigrationOption(); }
/** * Create a proper migration name: * ProductDetail: product_details * Product: products * @return string */ private function createMigrationName() { $pieces = preg_split('/(?=[A-Z])/', $this->argument('model'), -1, PREG_SPLIT_NO_EMPTY);
$string = ''; foreach ($pieces as $i => $piece) { if ($i+1 < count($pieces)) { $string .= strtolower($piece) . '_'; } else { $string .= Str::plural(strtolower($piece)); } }
return $string; }
/** * Get the console command arguments. * * @return array */ protected function getArguments() { return [ ['model', InputArgument::REQUIRED, 'The name of model will be created.'], ['alias', InputArgument::OPTIONAL, 'The alias of module will be used.'], ]; }
/** * Get the console command options. * * @return array */ protected function getOptions() { return [ ['fillable', null, InputOption::VALUE_OPTIONAL, 'The fillable attributes.', null], ['migration', 'm', InputOption::VALUE_NONE, 'Flag to create associated migrations', null], ['factory', 'f', InputOption::VALUE_NONE, 'Flag to create associated factory', null], ]; }
/** * Create the migration file with the given model if migration flag was used */ private function handleOptionalMigrationOption() { if ($this->option('migration') === true) { $migrationName = 'create_' . $this->createMigrationName() . '_table'; $this->call('module:make-migration', ['name' => $migrationName, 'alias' => $this->argument('alias')]); }
if ($this->option('factory') === true) { $this->call('module:make-factory', ['name' => $this->argument('model'), 'alias' => $this->argument('alias')]); } }
/** * @return mixed */ protected function getTemplateContents() { $module = $this->getModule();
return (new Stub('/model.stub', [ 'NAME' => $this->getModelName(), 'ALIAS' => $module->getAlias(), 'FILLABLE' => $this->getFillable(), 'NAMESPACE' => $this->getClassNamespace($module), 'CLASS' => $this->getClass(), 'MODULE' => $this->getModuleName(), 'STUDLY_NAME' => $module->getStudlyName(), 'MODULE_NAMESPACE' => $this->laravel['module']->config('namespace'), 'FACTORY_NAMESPACE' => $this->getFactoryNamespace(), ]))->render(); }
/** * @return mixed */ protected function getDestinationFilePath() { $path = module()->getModulePath($this->getModuleAlias());
$modelPath = GenerateConfigReader::read('model');
return $path . $modelPath->getPath() . '/' . $this->getModelName() . '.php'; }
/** * @return mixed|string */ private function getModelName() { return Str::studly($this->argument('model')); }
/** * @return string */ private function getFillable() { $fillable = $this->option('fillable');
if (!is_null($fillable)) { $arrays = explode(',', $fillable);
return json_encode($arrays); }
return '[]'; }
/** * Get default namespace. * * @return string */ public function getDefaultNamespace() : string { return $this->laravel['module']->config('paths.generator.model.path', 'Models'); }
/** * Get factory namespace. * * @return string */ public function getFactoryNamespace(): string { $module = $this->laravel['module'];
$config = GenerateConfigReader::read('factory');
$path = str_replace('/', '\\', $config->getPath());
return $module->config('namespace') . '\\' . $this->getModuleName() . '\\' . $path; } }
|