Skip to content

Instantly share code, notes, and snippets.

@mehradsadeghi
Created November 15, 2019 07:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mehradsadeghi/6d34a9a784874a54373b82aef4fe7c16 to your computer and use it in GitHub Desktop.
Save mehradsadeghi/6d34a9a784874a54373b82aef4fe7c16 to your computer and use it in GitHub Desktop.
<?php
use RecursiveArrayIterator;
use RecursiveIteratorIterator;
use ReflectionClass;
class Extractor {
public static function get_controllers_and_methods_list($path = 'Controllers/') {
$folder = app_path($path);
$files = self::list_folder_files($folder);
foreach($files as $file) {
$result[] = self::get_methods_of_class($file);
}
return $result;
}
public static function list_folder_files($directory) {
$files_and_folders = scandir($directory);
unset($files_and_folders[array_search('.', $files_and_folders, true)]);
unset($files_and_folders[array_search('..', $files_and_folders, true)]);
// prevent empty ordered elements
if (count($files_and_folders) < 1) {
return;
}
foreach($files_and_folders as $file_and_folder) {
if(is_dir("$directory/$file_and_folder")) {
$files[] = self::list_folder_files("$directory/$file_and_folder");
} else {
$files[] = "$directory/$file_and_folder";
}
}
$files = self::get_array_elemets($files);
$flat_array = iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($files)), 0);
return $flat_array;
}
public static function get_array_elemets($array) {
foreach($array as $file) {
if(is_array($file)) {
$output[] = self::get_array_elemets($file);
} else {
$explode = explode('Controllers/', $file);
$string = end($explode);
$string = str_replace('/', '\\', $string);
$output[] = str_replace('.php', '', $string);
}
}
return $output;
}
public static function get_methods_of_class($path) {
$class = new ReflectionClass('Controllers\\'.$path);
$classname = explode('\\', $class->name);
$classname = end($classname);
$classname = str_replace('controller', '', strtolower($classname));
foreach ($class->getMethods() as $method) {
$class_temp_name = explode('\\', $method->class);
$class_temp_name = end($class_temp_name);
$path_temp_name = explode('\\', $path);
$path_temp_name = end($path_temp_name);
if($class_temp_name == $path_temp_name) {
$methods[] = $method->name;
}
}
if(empty($methods)) {
return;
}
$result[$classname] = $methods;
return $result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment