Exemple #1
0
 /**
  * Searches the given module for any commands that could be automatically registered.
  * 
  * @param AbstractModule $module
  */
 protected function readModuleCommands(AbstractModule $module)
 {
     $name = $module->getName();
     $commandsDir = $module->getModuleDir() . '/Commands';
     if (!is_dir($commandsDir)) {
         return;
     }
     $moduleNamespace = $module->getNamespace() . NS . 'Commands' . NS;
     $console = $this;
     // register a closure so we can recursively scan the routes directory
     $scan = function ($dir, $namespace, $self) use($name, $moduleNamespace, $module, $console) {
         $namespace = $namespace ? trim($namespace, NS) . NS : '';
         $files = scandir($dir);
         foreach ($files as $file) {
             // ignore . and ..
             if (in_array($file, array('.', '..'))) {
                 continue;
             }
             // if directory then go recursively
             if (is_dir($dir . DS . $file)) {
                 $self($dir . DS . $file, $namespace . $file, $self);
                 continue;
             }
             $file = explode('.', $file);
             $rawClass = $file[0];
             $class = $moduleNamespace . $namespace . $rawClass;
             // class_exists autoloads a file
             if (class_exists($class)) {
                 $name = $class::getName();
                 $name = trim($name);
                 if (empty($name)) {
                     throw new InvalidCommandException('Command "' . $class . '" has to have a name. Please set the static property $name.');
                 }
                 $name = ($module->getCommandNamespace() ? $module->getCommandNamespace() . ':' : '') . $name;
                 $console->addCommand($name, $class);
             }
         }
     };
     // scan the module
     $scan($commandsDir, '', $scan);
 }