/** * Constructor de la clase. Carga la configuración de las acciones y opcionalmente carga el nombre de la clase que se va a crear * mediante el método create * * @access public * @param $action (string) nombre de la acción * @return void */ function ActionFactory($action = '') { // Cargar la configuración de acciones con las clases correspondientes $config = ActionConfiguration::getInstance(); $this->_actions = $config->getAccionesByLink(); // Datos de la acción por defecto $defaults = $config->getDefaults(); $actionDefault = $config->getAccionByName($defaults['nombre']); $this->_action_default = $actionDefault["link"]; // Guardar la accion que viene por parametro if (!empty($action)) { $this->_action = $action; } }
/** * Creates and configure action object * Services are marked as scope: prototype * * @param ActionConfiguration $config * * @throws \RunTimeException * @return ActionInterface */ protected function create(ActionConfiguration $config) { if (!$config->offsetExists(static::ACTION_TYPE_KEY)) { throw new \RunTimeException('The type must be defined'); } $type = $config->offsetGet(static::ACTION_TYPE_KEY); if (!isset($this->actions[$type])) { throw new \RunTimeException(sprintf('No attached service to action type named "%s"', $config->offsetGet(static::ACTION_TYPE_KEY))); } $actionServiceId = $this->actions[$type]; /** @var $action ActionInterface */ $action = $this->container->get($actionServiceId); $action->setOptions($config); return $action; }