sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							108 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							108 lines
						
					
					
						
							2.2 KiB
						
					
					
				| <?php | |
| 
 | |
| namespace Laravel\Tinker; | |
| 
 | |
| use Psy\Shell; | |
| use Illuminate\Support\Str; | |
| 
 | |
| class ClassAliasAutoloader | |
| { | |
|     /** | |
|      * The shell instance. | |
|      * | |
|      * @var \Psy\Shell | |
|      */ | |
|     protected $shell; | |
| 
 | |
|     /** | |
|      * All of the discovered classes. | |
|      * | |
|      * @var array | |
|      */ | |
|     protected $classes = []; | |
| 
 | |
|     /** | |
|      * Register a new alias loader instance. | |
|      * | |
|      * @param  \Psy\Shell  $shell | |
|      * @param  string  $classMapPath | |
|      * @return static | |
|      */ | |
|     public static function register(Shell $shell, $classMapPath) | |
|     { | |
|         return tap(new static($shell, $classMapPath), function ($loader) { | |
|             spl_autoload_register([$loader, 'aliasClass']); | |
|         }); | |
|     } | |
| 
 | |
|     /** | |
|      * Create a new alias loader instance. | |
|      * | |
|      * @param  \Psy\Shell  $shell | |
|      * @param  string  $classMapPath | |
|      * @return void | |
|      */ | |
|     public function __construct(Shell $shell, $classMapPath) | |
|     { | |
|         $this->shell = $shell; | |
| 
 | |
|         $vendorPath = dirname(dirname($classMapPath)); | |
| 
 | |
|         $classes = require $classMapPath; | |
| 
 | |
|         foreach ($classes as $class => $path) { | |
|             if (! Str::contains($class, '\\') || Str::startsWith($path, $vendorPath)) { | |
|                 continue; | |
|             } | |
| 
 | |
|             $name = class_basename($class); | |
| 
 | |
|             if (! isset($this->classes[$name])) { | |
|                 $this->classes[$name] = $class; | |
|             } | |
|         } | |
|     } | |
| 
 | |
|     /** | |
|      * Find the closest class by name. | |
|      * | |
|      * @param  string  $class | |
|      * @return void | |
|      */ | |
|     public function aliasClass($class) | |
|     { | |
|         if (Str::contains($class, '\\')) { | |
|             return; | |
|         } | |
| 
 | |
|         $fullName = isset($this->classes[$class]) | |
|             ? $this->classes[$class] | |
|             : false; | |
| 
 | |
|         if ($fullName) { | |
|             $this->shell->writeStdout("[!] Aliasing '{$class}' to '{$fullName}' for this Tinker session.\n"); | |
| 
 | |
|             class_alias($fullName, $class); | |
|         } | |
|     } | |
| 
 | |
|     /** | |
|      * Unregister the alias loader instance. | |
|      * | |
|      * @return void | |
|      */ | |
|     public function unregister() | |
|     { | |
|         spl_autoload_unregister([$this, 'aliasClass']); | |
|     } | |
| 
 | |
|     /** | |
|      * Handle the destruction of the instance. | |
|      * | |
|      * @return void | |
|      */ | |
|     public function __destruct() | |
|     { | |
|         $this->unregister(); | |
|     } | |
| }
 | |
| 
 |