ResourceMakeCommand.php
TLDR
This file ResourceMakeCommand.php
is a part of the Illuminate\Foundation\Console
namespace in the Demo Projects project. It is used to create a new resource in the project.
Methods
handle
This method executes the console command. It checks if the command is generating a resource collection and sets the type accordingly. It then calls the parent handle
method.
getStub
This method returns the stub file path for the generator. Based on whether the command is generating a resource collection or not, it resolves the stub path accordingly.
collection
This method determines if the command is generating a resource collection by checking the command options and the provided name.
resolveStubPath
This method resolves the fully-qualified path to the stub file. It checks if a custom stub path exists in the Laravel application or falls back to the default stub path.
getDefaultNamespace
This method returns the default namespace for the generated resource class.
getOptions
This method returns an array of console command options including force
and collection
options.
Classes
Class ResourceMakeCommand
This class extends the GeneratorCommand
class and is used to create a new resource in the Laravel project. It sets the command name, description, and type. It implements the handle
method to execute the command, and provides other helper methods to determine the stub file path, default namespace, and available command options.
<?php
namespace Illuminate\Foundation\Console;
use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Input\InputOption;
#[AsCommand(name: 'make:resource')]
class ResourceMakeCommand extends GeneratorCommand
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'make:resource';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a new resource';
/**
* The type of class being generated.
*
* @var string
*/
protected $type = 'Resource';
/**
* Execute the console command.
*
* @return void
*/
public function handle()
{
if ($this->collection()) {
$this->type = 'Resource collection';
}
parent::handle();
}
/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub()
{
return $this->collection()
? $this->resolveStubPath('/stubs/resource-collection.stub')
: $this->resolveStubPath('/stubs/resource.stub');
}
/**
* Determine if the command is generating a resource collection.
*
* @return bool
*/
protected function collection()
{
return $this->option('collection') ||
str_ends_with($this->argument('name'), 'Collection');
}
/**
* Resolve the fully-qualified path to the stub.
*
* @param string $stub
* @return string
*/
protected function resolveStubPath($stub)
{
return file_exists($customPath = $this->laravel->basePath(trim($stub, '/')))
? $customPath
: __DIR__.$stub;
}
/**
* Get the default namespace for the class.
*
* @param string $rootNamespace
* @return string
*/
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace.'\Http\Resources';
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return [
['force', 'f', InputOption::VALUE_NONE, 'Create the class even if the resource already exists'],
['collection', 'c', InputOption::VALUE_NONE, 'Create a resource collection'],
];
}
}