Neuron-PHP

ScaffoldCommand extends Command
in package

CLI command for generating complete CRUD scaffolds.

Generates controller, views, routes, and optionally migrations. Similar to Rails' scaffold generator for rapid prototyping.

Table of Contents

Properties

$arguments  : array<string|int, mixed>
$input  : Input
$inputReader  : IInputReader|null
$options  : array<string|int, mixed>
$output  : Output
$_HasMvcComponent  : bool
$_Messages  : array<string|int, mixed>
$_ProjectPath  : string
$fs  : IFileSystem
$templates  : ITemplateEngine

Methods

__construct()  : mixed
configure()  : void
Configure the command
execute()  : int
Execute the command
getArguments()  : array<string|int, mixed>
Get all configured arguments
getDescription()  : string
Get the command description
getHelp()  : string
Get the help text for this command
getName()  : string
Get the command name
getOptions()  : array<string|int, mixed>
Get all configured options
hasArgument()  : bool
Check if the command has a specific argument
hasOption()  : bool
Check if the command has a specific option
setInput()  : self
Set the input instance
setInputReader()  : self
Set the input reader (for dependency injection, especially in tests).
setOutput()  : self
Set the output instance
validate()  : void
Validate that required arguments are present
addArgument()  : self
Add an argument to the command
addOption()  : self
Add an option to the command
choice()  : string
Prompt user to select from a list of options.
confirm()  : bool
Ask user for yes/no confirmation.
getInputReader()  : IInputReader
Get the input reader instance.
prompt()  : string
Prompt user for input.
secret()  : string
Prompt for sensitive input without echoing to console.
findConfigPath()  : string|null
Find configuration directory
generateController()  : bool
Generate controller file (reuses logic from ControllerCommand)
generateMigration()  : bool
Generate migration file
generateMigrationTemplate()  : string
Generate migration template content
generateRoutes()  : bool
Generate routes in routes.yaml
generateViews()  : bool
Generate view files
getFieldOptions()  : array<string|int, mixed>
Get field options based on type
loadSettings()  : Yaml|null
Load settings from config directory
mapFieldType()  : string
Map field type to Phinx type
parseFields()  : array<string|int, mixed>
Parse field definitions string
parseResourceName()  : array<string|int, mixed>
Parse resource name into components
pluralize()  : string
Simple pluralization
underscore()  : string
Convert PascalCase to snake_case

Properties

$arguments

protected array<string|int, mixed> $arguments = []

$options

protected array<string|int, mixed> $options = []

Methods

execute()

Execute the command

public execute([array<string|int, mixed> $Parameters = [] ]) : int
Parameters
$Parameters : array<string|int, mixed> = []
Return values
int

Exit code (0 for success)

getArguments()

Get all configured arguments

public getArguments() : array<string|int, mixed>
Return values
array<string|int, mixed>

getDescription()

Get the command description

public getDescription() : string
Tags
inheritDoc
Return values
string

getHelp()

Get the help text for this command

public getHelp() : string
Return values
string

getName()

Get the command name

public getName() : string
Tags
inheritDoc
Return values
string

getOptions()

Get all configured options

public getOptions() : array<string|int, mixed>
Return values
array<string|int, mixed>

hasArgument()

Check if the command has a specific argument

public hasArgument(string $name) : bool
Parameters
$name : string
Return values
bool

hasOption()

Check if the command has a specific option

public hasOption(string $name) : bool
Parameters
$name : string
Return values
bool

setInput()

Set the input instance

public setInput(Input $input) : self
Parameters
$input : Input
Return values
self

setInputReader()

Set the input reader (for dependency injection, especially in tests).

public setInputReader(IInputReader $inputReader) : self

This allows tests to inject a TestInputReader with pre-programmed responses instead of requiring actual user input.

Parameters
$inputReader : IInputReader
Return values
self

setOutput()

Set the output instance

public setOutput(Output $output) : self
Parameters
$output : Output
Return values
self

validate()

Validate that required arguments are present

public validate() : void
Tags
throws
InvalidArgumentException

addArgument()

Add an argument to the command

protected addArgument(string $name[, bool $required = false ][, string $description = '' ][, mixed $default = null ]) : self
Parameters
$name : string

Argument name

$required : bool = false

Whether the argument is required

$description : string = ''

Description of the argument

$default : mixed = null

Default value if not provided

Return values
self

addOption()

Add an option to the command

protected addOption(string $name[, string|null $shortcut = null ][, bool $hasValue = false ][, string $description = '' ][, mixed $default = null ]) : self
Parameters
$name : string

Option name (long form)

$shortcut : string|null = null

Option shortcut (single character)

$hasValue : bool = false

Whether the option accepts a value

$description : string = ''

Description of the option

$default : mixed = null

Default value if not provided

Return values
self

choice()

Prompt user to select from a list of options.

protected choice(string $message, array<string|int, string> $options[, string|null $default = null ]) : string

Convenience method that delegates to the input reader. Users can select by entering either the option index (numeric) or the exact option text.

Example:

$env = $this->choice(
    "Select environment:",
    ['development', 'staging', 'production'],
    'development'
);
Parameters
$message : string

The prompt message

$options : array<string|int, string>

Available options

$default : string|null = null

Default option (will be marked with *)

Return values
string

The selected option

confirm()

Ask user for yes/no confirmation.

protected confirm(string $message[, bool $default = false ]) : bool

Convenience method that delegates to the input reader. Accepts: y, yes, true, 1 (case-insensitive) as positive responses.

Example:

if( $this->confirm( "Delete all files?" ) ) {
    // User confirmed
}
Parameters
$message : string

The confirmation message

$default : bool = false

Default value if user just presses enter

Return values
bool

True if user confirms, false otherwise

getInputReader()

Get the input reader instance.

protected getInputReader() : IInputReader

Creates a default StdinInputReader if not already set. This enables testable CLI commands by abstracting user input.

If output hasn't been set, a default Output instance will be created automatically.

Return values
IInputReader

prompt()

Prompt user for input.

protected prompt(string $message) : string

Convenience method that delegates to the input reader.

Example:

$name = $this->prompt( "Enter your name: " );
Parameters
$message : string

The prompt message to display

Return values
string

The user's response (trimmed)

secret()

Prompt for sensitive input without echoing to console.

protected secret(string $message) : string

Convenience method that delegates to the input reader. Note: Secret input hiding only works on Unix-like systems.

Example:

$password = $this->secret( "Enter password: " );
Parameters
$message : string

The prompt message

Return values
string

The user's input (trimmed)

findConfigPath()

Find configuration directory

private findConfigPath() : string|null
Return values
string|null

generateController()

Generate controller file (reuses logic from ControllerCommand)

private generateController(array<string|int, mixed> $info) : bool
Parameters
$info : array<string|int, mixed>
Return values
bool

generateMigration()

Generate migration file

private generateMigration(array<string|int, mixed> $info) : bool
Parameters
$info : array<string|int, mixed>
Return values
bool

generateMigrationTemplate()

Generate migration template content

private generateMigrationTemplate(array<string|int, mixed> $info, string $fieldsString) : string
Parameters
$info : array<string|int, mixed>
$fieldsString : string
Return values
string

generateRoutes()

Generate routes in routes.yaml

private generateRoutes(array<string|int, mixed> $info) : bool
Parameters
$info : array<string|int, mixed>
Return values
bool

generateViews()

Generate view files

private generateViews(array<string|int, mixed> $info) : bool
Parameters
$info : array<string|int, mixed>
Return values
bool

getFieldOptions()

Get field options based on type

private getFieldOptions(string $type, string $name) : array<string|int, mixed>
Parameters
$type : string
$name : string
Return values
array<string|int, mixed>

loadSettings()

Load settings from config directory

private loadSettings(string $configPath) : Yaml|null
Parameters
$configPath : string
Return values
Yaml|null

mapFieldType()

Map field type to Phinx type

private mapFieldType(string $type) : string
Parameters
$type : string
Return values
string

parseFields()

Parse field definitions string

private parseFields(string $fieldsString) : array<string|int, mixed>
Parameters
$fieldsString : string
Return values
array<string|int, mixed>

parseResourceName()

Parse resource name into components

private parseResourceName(string $name) : array<string|int, mixed>
Parameters
$name : string
Return values
array<string|int, mixed>

pluralize()

Simple pluralization

private pluralize(string $word) : string
Parameters
$word : string
Return values
string

underscore()

Convert PascalCase to snake_case

private underscore(string $word) : string
Parameters
$word : string
Return values
string

        
On this page

Search results