files = $files; } /** * Execute the console command. */ public function handle() { if ($this->option('all')) { $directory = $this->getDirectory($this->argument('name')); if ($this->files->isDirectory($directory)) { $this->error('Module already exists!'); } else { $this->createProviders(); $this->createConfig(); $this->createModel(); $this->createMigration(); $this->createController(); $this->createView(); } } } private function getDirectory($directory) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $directory); } private function createModel() { try { $model = Str::singular(class_basename($this->argument('name'))); $this->call('make:model', [ 'name' => 'App\\Modules\\' . trim($this->argument('name')) . '\\Models\\' . $model ]); } catch (\Exception $e) { $e->getMessage(); } } private function createView() { $directoryName = Str::singular(Str::studly(class_basename($this->argument('name')))); $path = $this->getViewsPath($this->argument('name')); if ($this->alreadyExists($path)) { $this->error('View already exists!'); } else { $this->makeDirectory($path); $stub = $this->files->get(base_path('resources/stubs/view.stub')); $this->files->put($path, $stub); $this->info('Views created'); //livewire $path = $this->getLivewireViewsPath($this->argument('name')); $this->makeDirectory($path); $this->info('Views - livewire folder created'); //components $path = $this->getComponentsViewsPath($this->argument('name')); $this->makeDirectory($path); $this->info('Views - components folder created'); } } private function getViewsPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Views/index.blade.php'; } private function getLivewireViewsPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Views/livewire/example.php'; } private function getComponentsViewsPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Views/components/example.php'; } private function createConfig() { $directoryName = Str::singular(Str::studly(class_basename($this->argument('name')))); $path = $this->getConfigPath($this->argument('name')); if ($this->alreadyExists($path)) { $this->error('Config already exists!'); } else { $this->makeDirectory($path); $stub = $this->files->get(base_path('resources/stubs/config.stub')); $this->files->put($path, $stub); $this->info('Config created'); } } private function getConfigPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Config/config.php'; } private function createProviders() { //Create ModuleServiceProvider $directoryName = Str::singular(Str::studly(class_basename($this->argument('name')))); $path = $this->getModuleServiceProviderPath($this->argument('name')); if ($this->alreadyExists($path)) { $this->error('ModuleServiceProvider already exists!'); } else { $this->makeDirectory($path); $stub = $this->files->get(base_path('resources/stubs/module_service_provider.stub')); $stub = str_replace( [ 'TeamplateDirectoryName', ], [ $directoryName ], $stub ); $this->files->put($path, $stub); $this->info('ModuleServiceProvider created'); } //Create RouteServiceProvider $path = $this->getRouteServiceProviderPath($this->argument('name')); if ($this->alreadyExists($path)) { $this->error('RouteServiceProvider already exists!'); } else { $this->makeDirectory($path); $stub = $this->files->get(base_path('resources/stubs/route_service_provider.stub')); $stub = str_replace( [ 'TeamplateDirectoryName', ], [ $directoryName ], $stub ); $this->files->put($path, $stub); $this->info('RouteServiceProvider created'); } } private function getModuleServiceProviderPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Providers/ModuleServiceProvider.php'; } private function getRouteServiceProviderPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Providers/RouteServiceProvider.php'; } private function createController() { $controller = Str::studly(class_basename($this->argument('name'))); $modelName = Str::singular(Str::studly(class_basename($this->argument('name')))); $path = $this->getControllerPath($this->argument('name')); if ($this->alreadyExists($path)) { $this->error('Controller already exists!'); } else { $this->makeDirectory($path); $stub = $this->files->get(base_path('resources/stubs/controller.model.stub')); $stub = str_replace( [ 'TeamplateNamespace', 'TeamplateFullModelClass', 'TeamplateClass', 'TeamplateDirectoryName' ], [ 'Modules\\' . trim($this->argument('name')) . '\\Http\\Controllers', 'Modules\\' . trim($this->argument('name')) . '\\Models\\' . $modelName, $controller . 'Controller', lcfirst($controller) ], $stub ); $this->files->put($path, $stub); $this->info('Controller created'); //Livewire Http $path = $this->getLivewireHttpPath($this->argument('name')); $this->makeDirectory($path); $this->info('Http - Livewire folder created'); //Components Http $path = $this->getComponentsHttpPath($this->argument('name')); $this->makeDirectory($path); $this->info('Http - Components folder created'); //Policies Http $path = $this->getPoliciesHttpPath($this->argument('name')); $this->makeDirectory($path); $this->info('Http - Policies folder created'); //Requests Http $path = $this->getRequestsHttpPath($this->argument('name')); $this->makeDirectory($path); $this->info('Http - Requests folder created'); //Routes create $this->createRoutes($controller, $modelName); } } private function getLivewireHttpPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Http/Livewire/example.php'; } private function getComponentsHttpPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Http/Components/example.php'; } private function getPoliciesHttpPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Http/Policies/example.php'; } private function getRequestsHttpPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Http/Requests/example.php'; } private function createRoutes($controller, $modelName) { $routePath = $this->getRoutesPath($this->argument('name')); if ($this->alreadyExists($routePath)) { $this->error('Routes already exists!'); } else { $this->makeDirectory($routePath); $stub = $this->files->get(base_path('resources/stubs/routes.web.stub')); $stub = str_replace( [ 'TeamplateDirectoryName', 'TeamplateRoutePrefix', 'TeamplateClass' ], [ $controller, lcfirst($modelName), $controller . 'Controller' ], $stub ); $this->files->put($routePath, $stub); $this->info('Routes created successfully'); } } private function alreadyExists($valuePath) { return $this->files->exists($valuePath); } private function getRoutesPath($argument) { return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Routes/web.php'; } private function getControllerPath($argument) { $controller = Str::studly(class_basename($argument)); return $this->laravel['path'] . '/Modules/' . str_replace('\\', '/', $argument) . '/Http/Controllers/' . $controller . 'Controller.php'; } private function makeDirectory($path) { $this->files->makeDirectory(dirname($path), 0777, true, true); //$this->files->makeDirectory(dirname($path)); } private function createMigration() { $name = trim($this->argument('name')); $table = Str::plural(Str::snake(class_basename($this->argument('name')))); try { $this->call('make:migration', [ 'name' => 'create_' . $table . '_table', '--create' => $table, '--path' => 'app/Modules/' . $name . '/Database/Migrations' ]); } catch (\Exception $e) { $e->getMessage(); } } }