Viewing file: GeneratorCommand.php (2.35 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Nwidart\Modules\Commands;
use Illuminate\Console\Command; use Nwidart\Modules\Exceptions\FileAlreadyExistException; use Nwidart\Modules\Generators\FileGenerator;
abstract class GeneratorCommand extends Command { /** * The name of 'name' argument. * * @var string */ protected $argumentName = '';
/** * Get template contents. * * @return string */ abstract protected function getTemplateContents();
/** * Get the destination file path. * * @return string */ abstract protected function getDestinationFilePath();
/** * Execute the console command. */ public function handle() : int { $path = str_replace('\\', '/', $this->getDestinationFilePath());
if (!$this->laravel['files']->isDirectory($dir = dirname($path))) { $this->laravel['files']->makeDirectory($dir, 0777, true); }
$contents = $this->getTemplateContents();
try { $overwriteFile = $this->hasOption('force') ? $this->option('force') : false; (new FileGenerator($path, $contents))->withFileOverwrite($overwriteFile)->generate();
$this->info("Created : {$path}"); } catch (FileAlreadyExistException $e) { $this->error("File : {$path} already exists.");
return E_ERROR; }
return 0; }
/** * Get class name. * * @return string */ public function getClass() { return class_basename($this->argument($this->argumentName)); }
/** * Get default namespace. * * @return string */ public function getDefaultNamespace() : string { return ''; }
/** * Get class namespace. * * @param \Nwidart\Modules\Module $module * * @return string */ public function getClassNamespace($module) { $extra = str_replace($this->getClass(), '', $this->argument($this->argumentName));
$extra = str_replace('/', '\\', $extra);
$namespace = $this->laravel['modules']->config('namespace');
$namespace .= '\\' . $module->getStudlyName();
$namespace .= '\\' . $this->getDefaultNamespace();
$namespace .= '\\' . $extra;
$namespace = str_replace('/', '\\', $namespace);
return trim($namespace, '\\'); } }
|