src/Console/Commands/FactoryMakeCommand.php
<?php
declare(strict_types=1);
namespace Cortex\Foundation\Console\Commands;
use Illuminate\Support\Str;
use Illuminate\Console\ConfirmableTrait;
use Symfony\Component\Console\Attribute\AsCommand;
use Cortex\Foundation\Traits\ConsoleMakeModuleCommand;
use Illuminate\Database\Console\Factories\FactoryMakeCommand as BaseFactoryMakeCommand;
#[AsCommand(name: 'make:factory')]
class FactoryMakeCommand extends BaseFactoryMakeCommand
{
use ConfirmableTrait;
use ConsoleMakeModuleCommand;
/**
* Get the destination class path.
*
* @param string $name
*
* @throws \Exception
*
* @return string
*/
protected function getPath($name): string
{
$name = Str::replaceFirst($this->rootNamespace(), $this->moduleName().DIRECTORY_SEPARATOR.'database'.DIRECTORY_SEPARATOR.'factories'.DIRECTORY_SEPARATOR, $name);
if (! $this->files->exists($path = $this->laravel['path'].DIRECTORY_SEPARATOR.$this->moduleName().DIRECTORY_SEPARATOR)) {
throw new \Exception("Invalid path: $path");
}
return $this->laravel['path'].DIRECTORY_SEPARATOR.str_replace('\\', DIRECTORY_SEPARATOR, $name).'.php';
}
/**
* Qualify the given model class base name.
*
* @param string $model
*
* @return string
*/
protected function qualifyModel(string $model)
{
$model = ltrim($model, '\\/');
$model = str_replace('/', '\\', $model);
$rootNamespace = $this->rootNamespace();
if (Str::startsWith($model, $rootNamespace)) {
return $model;
}
return $rootNamespace.'Models\\'.$model;
}
}