addArgument('name', InputArgument::REQUIRED, 'Controller name'); } /** * @param InputInterface $input * @param OutputInterface $output * @return int */ protected function execute(InputInterface $input, OutputInterface $output): int { $name = $input->getArgument('name'); $output->writeln("Make controller $name"); $suffix = config('app.controller_suffix', ''); if ($suffix && !strpos($name, $suffix)) { $name .= $suffix; } $name = str_replace('\\', '/', $name); if (!($pos = strrpos($name, '/'))) { $name = ucfirst($name); $controller_str = Util::guessPath(app_path(), 'controller') ?: 'controller'; $file = app_path() . "/$controller_str/$name.php"; $namespace = $controller_str === 'Controller' ? 'App\Controller' : 'app\controller'; } else { $name_str = substr($name, 0, $pos); if($real_name_str = Util::guessPath(app_path(), $name_str)) { $name_str = $real_name_str; } else if ($real_section_name = Util::guessPath(app_path(), strstr($name_str, '/', true))) { $upper = strtolower($real_section_name[0]) !== $real_section_name[0]; } else if ($real_base_controller = Util::guessPath(app_path(), 'controller')) { $upper = strtolower($real_base_controller[0]) !== $real_base_controller[0]; } $upper = $upper ?? strtolower($name_str[0]) !== $name_str[0]; if ($upper && !$real_name_str) { $name_str = preg_replace_callback('/\/([a-z])/', function ($matches) { return '/' . strtoupper($matches[1]); }, ucfirst($name_str)); } $path = "$name_str/" . ($upper ? 'Controller' : 'controller'); $name = ucfirst(substr($name, $pos + 1)); $file = app_path() . "/$path/$name.php"; $namespace = str_replace('/', '\\', ($upper ? 'App/' : 'app/') . $path); } $this->createController($name, $namespace, $file); return self::SUCCESS; } /** * @param $name * @param $namespace * @param $file * @return void */ protected function createController($name, $namespace, $file) { $path = pathinfo($file, PATHINFO_DIRNAME); if (!is_dir($path)) { mkdir($path, 0777, true); } $controller_content = <<