master

laravel/framework

Last updated at: 29/12/2023 09:22

SeederMakeCommand.php

TLDR

This file, SeederMakeCommand.php, is a part of the Illuminate\Database\Console\Seeds namespace and extends the GeneratorCommand class. It is responsible for creating a new seeder class.

Methods

handle

This method is responsible for executing the console command. It calls the handle method of the parent class.

getStub

This method returns the stub file path for the seeder generator. It resolves the path using the resolveStubPath method.

resolveStubPath

This method resolves the fully-qualified path to the stub file. If a custom path is specified, it checks if the file exists. Otherwise, it returns the default path.

getPath

This method returns the destination class path for the generated seeder class. It replaces the root namespace with an empty string and appends the class name to the relevant directory path.

rootNamespace

This method returns the root namespace for the seeder class.

<?php

namespace Illuminate\Database\Console\Seeds;

use Illuminate\Console\GeneratorCommand;
use Illuminate\Support\Str;
use Symfony\Component\Console\Attribute\AsCommand;

#[AsCommand(name: 'make:seeder')]
class SeederMakeCommand extends GeneratorCommand
{
    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'make:seeder';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a new seeder class';

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

    /**
     * Execute the console command.
     *
     * @return void
     */
    public function handle()
    {
        parent::handle();
    }

    /**
     * Get the stub file for the generator.
     *
     * @return string
     */
    protected function getStub()
    {
        return $this->resolveStubPath('/stubs/seeder.stub');
    }

    /**
     * Resolve the fully-qualified path to the stub.
     *
     * @param  string  $stub
     * @return string
     */
    protected function resolveStubPath($stub)
    {
        return is_file($customPath = $this->laravel->basePath(trim($stub, '/')))
            ? $customPath
            : __DIR__.$stub;
    }

    /**
     * Get the destination class path.
     *
     * @param  string  $name
     * @return string
     */
    protected function getPath($name)
    {
        $name = str_replace('\\', '/', Str::replaceFirst($this->rootNamespace(), '', $name));

        if (is_dir($this->laravel->databasePath().'/seeds')) {
            return $this->laravel->databasePath().'/seeds/'.$name.'.php';
        }

        return $this->laravel->databasePath().'/seeders/'.$name.'.php';
    }

    /**
     * Get the root namespace for the class.
     *
     * @return string
     */
    protected function rootNamespace()
    {
        return 'Database\Seeders\\';
    }
}