master

laravel/framework

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

ChannelMakeCommand.php

TLDR

This file, ChannelMakeCommand.php, is a part of the Demo Projects project. It is located at src/Illuminate/Foundation/Console/ChannelMakeCommand.php. The file contains the ChannelMakeCommand class, which extends the GeneratorCommand class. This command is used to create a new channel class.

Methods

buildClass

This method is used to build the class with the given name. It replaces the placeholders 'DummyUser' and '{{ userModel }}' in the generated class code with the base name of the user provider model.

getStub

This method returns the path to the stub file for the generator. In this case, it returns __DIR__.'/stubs/channel.stub'.

getDefaultNamespace

This method returns the default namespace for the generated class. It appends '\Broadcasting' to the root namespace.

getOptions

This method returns an array of console command options. In this case, it returns an array containing the force option, which allows the class to be created even if the channel already exists.

Classes

ChannelMakeCommand

This class extends the GeneratorCommand class and represents a command for creating a new channel class. It sets the command name, description, and type. It also overrides some methods to customize the class generation process.

<?php

namespace Illuminate\Foundation\Console;

use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Input\InputOption;

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

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

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

    /**
     * Build the class with the given name.
     *
     * @param  string  $name
     * @return string
     */
    protected function buildClass($name)
    {
        return str_replace(
            ['DummyUser', '{{ userModel }}'],
            class_basename($this->userProviderModel()),
            parent::buildClass($name)
        );
    }

    /**
     * Get the stub file for the generator.
     *
     * @return string
     */
    protected function getStub()
    {
        return __DIR__.'/stubs/channel.stub';
    }

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

    /**
     * Get the console command arguments.
     *
     * @return array
     */
    protected function getOptions()
    {
        return [
            ['force', 'f', InputOption::VALUE_NONE, 'Create the class even if the channel already exists'],
        ];
    }
}