[--param1=value1 --param2 ...] * ~~~ * * @author Qiang Xue * * @since 2.0 */ class Controller extends \yii\base\Controller { /** * Runs an action with the specified action ID and parameters. * If the action ID is empty, the method will use [[defaultAction]]. * @param string $id the ID of the action to be executed. * @param array $params the parameters (name-value pairs) to be passed to the action. * @return integer the status of the action execution. 0 means normal, other values mean abnormal. * @throws InvalidRouteException if the requested action ID cannot be resolved into an action successfully. * @see createAction */ public function runAction($id, $params = array()) { if ($params !== array()) { $class = new \ReflectionClass($this); foreach ($params as $name => $value) { if ($class->hasProperty($name)) { $property = $class->getProperty($name); if ($property->isPublic() && !$property->isStatic() && $property->getDeclaringClass()->getName() === get_class($this)) { $this->$name = $value; unset($params[$name]); } } } } return parent::runAction($id, $params); } /** * Validates the parameter being bound to actions. * This method is invoked when parameters are being bound to the currently requested action. * Child classes may override this method to throw exceptions when there are missing and/or unknown parameters. * @param Action $action the currently requested action * @param array $missingParams the names of the missing parameters * @param array $unknownParams the unknown parameters (name=>value) * @throws InvalidRequestException if there are missing or unknown parameters */ public function validateActionParams($action, $missingParams, $unknownParams) { if (!empty($missingParams)) { throw new InvalidRequestException(Yii::t('yii', 'Missing required options: {params}', array( '{params}' => implode(', ', $missingParams), ))); } elseif (!empty($unknownParams)) { throw new InvalidRequestException(Yii::t('yii', 'Unknown options: {params}', array( '{params}' => implode(', ', $unknownParams), ))); } } /** * Reads input via the readline PHP extension if that's available, or fgets() if readline is not installed. * * @param string $message to echo out before waiting for user input * @param string $default the default string to be returned when user does not write anything. * Defaults to null, means that default string is disabled. * @return mixed line read as a string, or false if input has been closed */ public function prompt($message, $default = null) { if($default !== null) { $message .= " [$default] "; } else { $message .= ' '; } if(extension_loaded('readline')) { $input = readline($message); if($input !== false) { readline_add_history($input); } } else { echo $message; $input = fgets(STDIN); } if($input === false) { return false; } else { $input = trim($input); return ($input === '' && $default !== null) ? $default : $input; } } /** * Asks user to confirm by typing y or n. * * @param string $message to echo out before waiting for user input * @param boolean $default this value is returned if no selection is made. * @return boolean whether user confirmed */ public function confirm($message, $default = false) { echo $message . ' (yes|no) [' . ($default ? 'yes' : 'no') . ']:'; $input = trim(fgets(STDIN)); return empty($input) ? $default : !strncasecmp($input, 'y', 1); } }