src/Console/Commands/Api.php
<?php
namespace Laragear\ApiManager\Console\Commands;
use Illuminate\Console\GeneratorCommand;
use Illuminate\Support\Str;
use Symfony\Component\Console\Attribute\AsCommand;
use function class_basename;
use function file_exists;
use function str_replace;
use function trim;
/**
* @internal
*/
#[AsCommand(name: 'make:api')]
class Api extends GeneratorCommand
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'make:api';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Creates a new API class to simplify server-side requests';
/**
* The type of class being generated.
*
* @var string
*/
protected $type = 'Api';
/**
* Build the class with the given name.
*
* @param string $name
* @return string
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
protected function buildClass($name)
{
return str_replace('dummyClass', Str::snake(class_basename($name), '-'), parent::buildClass($name));
}
/**
* Get the root namespace for the class.
*
* @return string
*/
protected function rootNamespace()
{
return $this->laravel->getNamespace() . 'Http\Apis';
}
/**
* Get the destination class path.
*
* @param string $name
* @return string
*/
protected function getPath($name)
{
$name = Str::replaceFirst($this->rootNamespace(), '', $name);
return $this->laravel['path'].'/Http/Apis/'.str_replace('\\', '/', $name).'.php';
}
/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub(): string
{
return $this->resolveStubPath('/stubs/api.stub');
}
/**
* Resolve the fully-qualified path to the stub.
*
* @param string $stub
* @return string
*/
protected function resolveStubPath(string $stub): string
{
return file_exists($customPath = $this->laravel->basePath(trim($stub, '/')))
? $customPath
: __DIR__.'/../../../'.$stub;
}
}