1)`. * Then the `run()` method will be invoked as `run(1)` automatically. * * @author Qiang Xue * @since 2.0 */ class Action extends Component { /** * @var string ID of the action */ public $id; /** * @var Controller the controller that owns this action */ public $controller; /** * Constructor. * @param string $id the ID of this action * @param Controller $controller the controller that owns this action * @param array $config name-value pairs that will be used to initialize the object properties */ public function __construct($id, $controller, $config = array()) { $this->id = $id; $this->controller = $controller; parent::__construct($config); } /** * Returns the unique ID of this action among the whole application. * @return string the unique ID of this action among the whole application. */ public function getUniqueId() { return $this->controller->getUniqueId() . '/' . $this->id; } /** * Runs this action with the specified parameters. * This method is mainly invoked by the controller. * @param array $params the parameters to be bound to the action's run() method. * @return mixed the result of the action * @throws InvalidConfigException if the action class does not have a run() method */ public function runWithParams($params) { if (!method_exists($this, 'run')) { throw new InvalidConfigException(get_class($this) . ' must define a "run()" method.'); } $args = $this->controller->bindActionParams($this, $params); Yii::trace('Running "' . get_class($this) . '::run()" with parameters: ' . var_export($args, true), __METHOD__); return call_user_func_array(array($this, 'run'), $args); } }