Вход Регистрация
Файл: gapps/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php
Строк: 180
<?php

namespace IlluminateConsole;

use 
IlluminateSupportStr;
use 
IlluminateFilesystemFilesystem;
use 
SymfonyComponentConsoleInputInputArgument;

abstract class 
GeneratorCommand extends Command
{
    
/**
     * The filesystem instance.
     *
     * @var IlluminateFilesystemFilesystem
     */
    
protected $files;

    
/**
     * The type of class being generated.
     *
     * @var string
     */
    
protected $type;

    
/**
     * Create a new controller creator command instance.
     *
     * @param  IlluminateFilesystemFilesystem  $files
     * @return void
     */
    
public function __construct(Filesystem $files)
    {
        
parent::__construct();

        
$this->files $files;
    }

    
/**
     * Get the stub file for the generator.
     *
     * @return string
     */
    
abstract protected function getStub();

    
/**
     * Execute the console command.
     *
     * @return bool|null
     */
    
public function fire()
    {
        
$name $this->parseName($this->getNameInput());

        
$path $this->getPath($name);

        if (
$this->alreadyExists($this->getNameInput())) {
            
$this->error($this->type.' already exists!');

            return 
false;
        }

        
$this->makeDirectory($path);

        
$this->files->put($path$this->buildClass($name));

        
$this->info($this->type.' created successfully.');
    }

    
/**
     * Determine if the class already exists.
     *
     * @param  string  $rawName
     * @return bool
     */
    
protected function alreadyExists($rawName)
    {
        
$name $this->parseName($rawName);

        return 
$this->files->exists($this->getPath($name));
    }

    
/**
     * Get the destination class path.
     *
     * @param  string  $name
     * @return string
     */
    
protected function getPath($name)
    {
        
$name str_replace($this->laravel->getNamespace(), ''$name);

        return 
$this->laravel['path'].'/'.str_replace('\', '/', $name).'.php';
    }

    /**
     * Parse the name and format according to the root namespace.
     *
     * @param  string  $name
     * @return string
     */
    protected function parseName($name)
    {
        $rootNamespace = $this->laravel->getNamespace();

        if (Str::startsWith($name, $rootNamespace)) {
            return $name;
        }

        if (Str::contains($name, '
/')) {
            $name = str_replace('
/', '\', $name);
        }

        return $this->parseName($this->getDefaultNamespace(trim($rootNamespace, '
\')).'\'.$name);
    }

    /**
     * Get the default namespace for the class.
     *
     * @param  string  $rootNamespace
     * @return string
     */
    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace;
    }

    /**
     * Build the directory for the class if necessary.
     *
     * @param  string  $path
     * @return string
     */
    protected function makeDirectory($path)
    {
        if (! $this->files->isDirectory(dirname($path))) {
            $this->files->makeDirectory(dirname($path), 0777, true, true);
        }
    }

    /**
     * Build the class with the given name.
     *
     * @param  string  $name
     * @return string
     */
    protected function buildClass($name)
    {
        $stub = $this->files->get($this->getStub());

        return $this->replaceNamespace($stub, $name)->replaceClass($stub, $name);
    }

    /**
     * Replace the namespace for the given stub.
     *
     * @param  string  $stub
     * @param  string  $name
     * @return $this
     */
    protected function replaceNamespace(&$stub, $name)
    {
        $stub = str_replace(
            '
DummyNamespace', $this->getNamespace($name), $stub
        );

        $stub = str_replace(
            '
DummyRootNamespace', $this->laravel->getNamespace(), $stub
        );

        return $this;
    }

    /**
     * Get the full namespace name for a given class.
     *
     * @param  string  $name
     * @return string
     */
    protected function getNamespace($name)
    {
        return trim(implode('
\', array_slice(explode('\', $name), 0, -1)), '\');
    }

    /**
     * Replace the class name for the given stub.
     *
     * @param  string  $stub
     * @param  string  $name
     * @return string
     */
    protected function replaceClass($stub, $name)
    {
        $class = str_replace($this->getNamespace($name).'
\', '', $name);

        return str_replace('
DummyClass', $class, $stub);
    }

    /**
     * Get the desired class name from the input.
     *
     * @return string
     */
    protected function getNameInput()
    {
        return trim($this->argument('
name'));
    }

    /**
     * Get the console command arguments.
     *
     * @return array
     */
    protected function getArguments()
    {
        return [
            ['
name', InputArgument::REQUIRED, 'The name of the class'],
        ];
    }
}
Онлайн: 1
Реклама