mName = $commandData->modelName; $this->prepareAddOns(); $this->prepareOptions($commandData); $this->prepareModelNames(); $this->preparePrefixes(); $this->loadPaths(); $this->prepareTableName(); $this->preparePrimaryName(); $this->loadNamespaces($commandData); $commandData = $this->loadDynamicVariables($commandData); $this->commandData = &$commandData; } public function loadNamespaces(CommandData &$commandData) { $prefix = $this->prefixes['ns']; if (!empty($prefix)) { $prefix = '\\'.$prefix; } $this->nsApp = $commandData->commandObj->getLaravel()->getNamespace(); $this->nsApp = substr($this->nsApp, 0, strlen($this->nsApp) - 1); $this->nsModel = 'App\Models'; $this->nsModelExtend = 'App\Models\AbstractModel'; $this->nsBaseController = 'App\Http\Controllers'; $this->nsController = 'App\Http\Controllers'.$prefix; $this->nsApiTests = 'Tests\APIs'; $this->nsTests = 'Tests'; } public function loadPaths() { $prefix = $this->prefixes['path']; if (!empty($prefix)) { $prefix .= '/'; } $this->pathModel = app_path('Models/'); $this->pathApiRoutes = base_path('routes/api.php'); $this->pathApiTests = base_path('tests/APIs/'); $this->pathController = app_path('Http/Controllers/').$prefix; $this->pathRoutes = base_path('routes/web.php'); $this->pathFactory = database_path('factories/'); $this->pathSeeder = database_path('seeds/'); $this->pathDatabaseSeeder = database_path('seeds/DatabaseSeeder.php'); } public function loadDynamicVariables(CommandData &$commandData) { $commandData->addDynamicVariable('$NAMESPACE_APP$', $this->nsApp); $commandData->addDynamicVariable('$NAMESPACE_MODEL$', $this->nsModel); $commandData->addDynamicVariable('$NAMESPACE_MODEL_EXTEND$', $this->nsModelExtend); $commandData->addDynamicVariable('$NAMESPACE_BASE_CONTROLLER$', $this->nsBaseController); $commandData->addDynamicVariable('$NAMESPACE_CONTROLLER$', $this->nsController); $commandData->addDynamicVariable('$NAMESPACE_API_TESTS$', $this->nsApiTests); $commandData->addDynamicVariable('$NAMESPACE_TESTS$', $this->nsTests); $commandData->addDynamicVariable('$TABLE_NAME$', $this->tableName); $commandData->addDynamicVariable('$TABLE_NAME_TITLE$', Str::studly($this->tableName)); $commandData->addDynamicVariable('$PRIMARY_KEY_NAME$', $this->primaryName); $commandData->addDynamicVariable('$MODEL_NAME$', $this->mName); $commandData->addDynamicVariable('$MODEL_NAME_CAMEL$', $this->mCamel); $commandData->addDynamicVariable('$MODEL_NAME_PLURAL$', $this->mPlural); $commandData->addDynamicVariable('$MODEL_NAME_PLURAL_CAMEL$', $this->mCamelPlural); $commandData->addDynamicVariable('$MODEL_NAME_SNAKE$', $this->mSnake); $commandData->addDynamicVariable('$MODEL_NAME_PLURAL_SNAKE$', $this->mSnakePlural); $commandData->addDynamicVariable('$MODEL_NAME_DASHED$', $this->mDashed); $commandData->addDynamicVariable('$MODEL_NAME_PLURAL_DASHED$', $this->mDashedPlural); $commandData->addDynamicVariable('$MODEL_NAME_SLASH$', $this->mSlash); $commandData->addDynamicVariable('$MODEL_NAME_PLURAL_SLASH$', $this->mSlashPlural); $commandData->addDynamicVariable('$MODEL_NAME_HUMAN$', $this->mHuman); $commandData->addDynamicVariable('$MODEL_NAME_PLURAL_HUMAN$', $this->mHumanPlural); $commandData->addDynamicVariable('$FILES$', ''); if (!empty($this->prefixes['route'])) { $commandData->addDynamicVariable('$ROUTE_NAMED_PREFIX$', $this->prefixes['route'].'.'); $commandData->addDynamicVariable('$ROUTE_PREFIX$', str_replace('.', '/', $this->prefixes['route']).'/'); $commandData->addDynamicVariable('$RAW_ROUTE_PREFIX$', $this->prefixes['route']); } else { $commandData->addDynamicVariable('$ROUTE_PREFIX$', ''); $commandData->addDynamicVariable('$ROUTE_NAMED_PREFIX$', ''); } if (!empty($this->prefixes['ns'])) { $commandData->addDynamicVariable('$PATH_PREFIX$', $this->prefixes['ns'].'\\'); } else { $commandData->addDynamicVariable('$PATH_PREFIX$', ''); } if (!empty($this->prefixes['view'])) { $commandData->addDynamicVariable('$VIEW_PREFIX$', str_replace('/', '.', $this->prefixes['view']).'.'); } else { $commandData->addDynamicVariable('$VIEW_PREFIX$', ''); } if (!empty($this->prefixes['public'])) { $commandData->addDynamicVariable('$PUBLIC_PREFIX$', $this->prefixes['public']); } else { $commandData->addDynamicVariable('$PUBLIC_PREFIX$', ''); } $commandData->addDynamicVariable( '$API_PREFIX$', 'api' ); $commandData->addDynamicVariable( '$API_VERSION$', 'v1' ); $commandData->addDynamicVariable('$SEARCHABLE$', ''); return $commandData; } public function prepareTableName() { if ($this->getOption('tableName')) { $this->tableName = $this->getOption('tableName'); } else { $this->tableName = $this->mSnakePlural; } } public function preparePrimaryName() { if ($this->getOption('primary')) { $this->primaryName = $this->getOption('primary'); } else { $this->primaryName = 'id'; } } public function prepareModelNames() { if ($this->getOption('plural')) { $this->mPlural = $this->getOption('plural'); } else { $this->mPlural = Str::plural($this->mName); } $this->mCamel = Str::camel($this->mName); $this->mCamelPlural = Str::camel($this->mPlural); $this->mSnake = Str::snake($this->mName); $this->mSnakePlural = Str::snake($this->mPlural); $this->mDashed = str_replace('_', '-', Str::snake($this->mSnake)); $this->mDashedPlural = str_replace('_', '-', Str::snake($this->mSnakePlural)); $this->mSlash = str_replace('_', '/', Str::snake($this->mSnake)); $this->mSlashPlural = str_replace('_', '/', Str::snake($this->mSnakePlural)); $this->mHuman = Str::title(str_replace('_', ' ', Str::snake($this->mSnake))); $this->mHumanPlural = Str::title(str_replace('_', ' ', Str::snake($this->mSnakePlural))); } public function prepareOptions(CommandData &$commandData) { foreach (self::$availableOptions as $option) { $this->options[$option] = $commandData->commandObj->option($option); } if (isset($options['fromTable']) and $this->options['fromTable']) { if (!$this->options['tableName']) { $commandData->commandError('tableName required with fromTable option.'); exit; } } $this->options['softDelete'] = true; if (!empty($this->options['skip'])) { $this->options['skip'] = array_map('trim', explode(',', $this->options['skip'])); } } public function preparePrefixes() { $this->prefixes['route'] = explode('/', ''); $this->prefixes['path'] = explode('/', ''); $this->prefixes['view'] = explode('.', ''); $this->prefixes['public'] = explode('/', ''); if ($this->getOption('prefix')) { $multiplePrefixes = explode('/', $this->getOption('prefix')); $this->prefixes['route'] = array_merge($this->prefixes['route'], $multiplePrefixes); $this->prefixes['path'] = array_merge($this->prefixes['path'], $multiplePrefixes); $this->prefixes['view'] = array_merge($this->prefixes['view'], $multiplePrefixes); $this->prefixes['public'] = array_merge($this->prefixes['public'], $multiplePrefixes); } $this->prefixes['route'] = array_diff($this->prefixes['route'], ['']); $this->prefixes['path'] = array_diff($this->prefixes['path'], ['']); $this->prefixes['view'] = array_diff($this->prefixes['view'], ['']); $this->prefixes['public'] = array_diff($this->prefixes['public'], ['']); $routePrefix = ''; foreach ($this->prefixes['route'] as $singlePrefix) { $routePrefix .= Str::camel($singlePrefix).'.'; } if (!empty($routePrefix)) { $routePrefix = substr($routePrefix, 0, strlen($routePrefix) - 1); } $this->prefixes['route'] = $routePrefix; $nsPrefix = ''; foreach ($this->prefixes['path'] as $singlePrefix) { $nsPrefix .= Str::title($singlePrefix).'\\'; } if (!empty($nsPrefix)) { $nsPrefix = substr($nsPrefix, 0, strlen($nsPrefix) - 1); } $this->prefixes['ns'] = $nsPrefix; $pathPrefix = ''; foreach ($this->prefixes['path'] as $singlePrefix) { $pathPrefix .= Str::title($singlePrefix).'/'; } if (!empty($pathPrefix)) { $pathPrefix = substr($pathPrefix, 0, strlen($pathPrefix) - 1); } $this->prefixes['path'] = $pathPrefix; $viewPrefix = ''; foreach ($this->prefixes['view'] as $singlePrefix) { $viewPrefix .= Str::camel($singlePrefix).'/'; } if (!empty($viewPrefix)) { $viewPrefix = substr($viewPrefix, 0, strlen($viewPrefix) - 1); } $this->prefixes['view'] = $viewPrefix; $publicPrefix = ''; foreach ($this->prefixes['public'] as $singlePrefix) { $publicPrefix .= Str::camel($singlePrefix).'/'; } if (!empty($publicPrefix)) { $publicPrefix = substr($publicPrefix, 0, strlen($publicPrefix) - 1); } $this->prefixes['public'] = $publicPrefix; } public function overrideOptionsFromJsonFile($jsonData) { $options = self::$availableOptions; foreach ($options as $option) { if (isset($jsonData['options'][$option])) { $this->setOption($option, $jsonData['options'][$option]); } } // prepare prefixes than reload namespaces, paths and dynamic variables if (!empty($this->getOption('prefix'))) { $this->preparePrefixes(); $this->loadPaths(); $this->loadNamespaces($this->commandData); $this->loadDynamicVariables($this->commandData); } } public function getOption($option) { if (isset($this->options[$option])) { return $this->options[$option]; } return false; } public function getAddOn($addOn) { if (isset($this->addOns[$addOn])) { return $this->addOns[$addOn]; } return false; } public function setOption($option, $value) { $this->options[$option] = $value; } public function prepareAddOns() { $this->addOns['tests'] = false; } public function excludeFields() { return self::$excludeFields; } }