public static function prompt(string $field, $options = null, string $validation = null): string
	{
		$extra_output = '';
		$default      = '';

		if (is_string($options))
		{
			$extra_output = ' [' . static::color($options, 'white') . ']';
			$default      = $options;
		}

		if (is_array($options) && $options)
		{
			$opts                 = $options;
			$extra_output_default = static::color($opts[0], 'white');

			unset($opts[0]);

			if (empty($opts))
			{
				$extra_output = $extra_output_default;
			}
			else
			{
				$extra_output = ' [' . $extra_output_default . ', ' . implode(', ', $opts) . ']';
				$validation  .= '|in_list[' . implode(',', $options) . ']';
				$validation   = trim($validation, '|');
			}

			$default = $options[0];
		}

		fwrite(STDOUT, $field . $extra_output . ': ');

		// Read the input from keyboard.
		$input = trim(static::input()) ?: $default;

		if (isset($validation))
		{
			while (! static::validate($field, $input, $validation))
			{
				$input = static::prompt($field, $options, $validation);
			}
		}

		return empty($input) ? '' : $input;
	}
public static function prompt(string $field, $options = null, string $validation = null): string
	{
		$extra_output = '';
		$default      = '';

		if (is_string($options))
		{
			$extra_output = ' [' . static::color($options, 'white') . ']';
			$default      = $options;
		}

		if (is_array($options) && $options)
		{
			$opts                 = $options;
			$extra_output_default = static::color($opts[0], 'white');

			unset($opts[0]);

			if (empty($opts))
			{
				$extra_output = $extra_output_default;
			}
			else
			{
				$extra_output = ' [' . $extra_output_default . ', ' . implode(', ', $opts) . ']';
				$validation  .= '|in_list[' . implode(',', $options) . ']';
				$validation   = trim($validation, '|');
			}

			$default = $options[0];
		}

		fwrite(STDOUT, $field . $extra_output . ': ');

		// Read the input from keyboard.
		$input = trim(static::input()) ?: $default;

		if (isset($validation))
		{
			while (! static::validate($field, $input, $validation))
			{
				$input = static::prompt($field, $options, $validation);
			}
		}

		return empty($input) ? '' : $input;
	}
public static function prompt ( string $ field , $ options = null , string $ validation = null ) : string { $ extra_output = '' ; $ default = '' ; if ( is_string ( $ options ) ) { $ extra_output = ' [' . static :: color ( $ options , 'white' ) . ']' ; $ default = $ options ; } if ( is_array ( $ options ) && $ options ) { $ opts = $ options ; $ extra_output_default = static :: color ( $ opts [ 0 ] , 'white' ) ; unset ( $ opts [ 0 ] ) ; if ( empty ( $ opts ) ) { $ extra_output = $ extra_output_default ; } else { $ extra_output = ' [' . $ extra_output_default . ', ' . implode ( ', ' , $ opts ) . ']' ; $ validation .= '|in_list[' . implode ( ',' , $ options ) . ']' ; $ validation = trim ( $ validation , '|' ) ; } $ default = $ options [ 0 ] ; } fwrite ( STDOUT , $ field . $ extra_output . ': ' ) ; // Read the input from keyboard. $ input = trim ( static :: input ( ) ) ? : $ default ; if ( isset ( $ validation ) ) { while ( ! static :: validate ( $ field , $ input , $ validation ) ) { $ input = static :: prompt ( $ field , $ options , $ validation ) ; } } return empty ( $ input ) ? '' : $ input ; }
Asks the user for input.

Usage:

// Takes any input
$color = CLI::prompt('What is your favorite color?');

// Takes any input, but offers default
$color = CLI::prompt('What is your favourite color?', 'white');

// Will validate options with the in_list rule and accept only if one of the list
$color = CLI::prompt('What is your favourite color?', array('red','blue'));

// Do not provide options but requires a valid email
$email = CLI::prompt('What is your email?', null, 'required|valid_email');

@param string       $field      Output "field" question
@param string|array $options    String to a default value, array to a list of options (the first option will be the default value)
@param string       $validation Validation rules

@return             string                   The user input
@codeCoverageIgnore
Asks the user for input .