[ 'mode' => 'argument', 'required' => true, 'description' => 'Model name (e.g., Post)', ], 'module' => [ 'mode' => 'argument', 'required' => false, 'description' => 'Target module name (e.g., Blog). Optional if using create::model', ], ]; public function handle(Input $input, Output $output): int { $module = null; if (preg_match('/^create:([^:]+):model$/', $this->getName(), $matches)) { $module = $matches[1]; } if (!$module) { $module = $input->hasArgument('module') ? $input->getArgument('module') : null; } $module = trim((string) $module); $name = trim((string) $input->getArgument('name')); if ($module === '' || $name === '') { $output->writeln('Module and Name are required.'); return 1; } // Case-insensitive module directory lookup $modulesDir = getcwd() . '/modules'; $moduleDir = null; if (is_dir($modulesDir)) { foreach (scandir($modulesDir) as $dir) { if (strtolower($dir) === strtolower($module)) { $moduleDir = $modulesDir . '/' . $dir; $module = $dir; // Use actual casing break; } } } if (!$moduleDir || !is_dir($moduleDir)) { $output->writeln("Module '$module' does not exist."); return 1; } $modelsDir = $moduleDir . '/Models'; if (!is_dir($modelsDir)) { @mkdir($modelsDir, 0777, true); } $path = $modelsDir . '/' . $name . '.php'; if (file_exists($path)) { $output->writeln("Model '$name' already exists in module '$module'."); return 1; } $namespace = "Project\\Modules\\$module\\Models"; $stub = file_get_contents(dirname(__DIR__) . '/stubs/model.stub'); $template = strtr($stub, [ '{{namespace}}' => $namespace, '{{class}}' => $name, ]); file_put_contents($path, $template); $output->writeln("Model '$name' created at modules/$module/Models/$name.php"); return 0; } };